如何爬虫 爬虫怎么做( 二 )


由于Requests和Beautifulsoup4是第三方的库 , 所以在下面要用import来进行引入
然后是
defget_html(url):
'''
封装请求
'''
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
'ContentType':
'text/html; charset=utf-8',
'Accept-Encoding':
'gzip, deflate, sdch',
'Accept-Language':
'zh-CN,zh;q=0.8',
'Connection':
'keep-alive',
}
try:
htmlcontet = requests.get(url, headers=headers, timeout= 30)
htmlcontet.raise_for_status()
htmlcontet.encoding = 'utf-8'
returnhtmlcontet.text
except:
return" 请求失败 "
其中
defget_html(url):
构造一个名为get_html的函数 , 并传入你要请求的URL地址进去 , 会返回一个请求后的结果 , 
构造好后 , 调用的时候直接
url = '包裹你的url'
get_html(url)
然后同样备注好你的这个函数的功能是做什么的 , headers里面包裹了一些伪装成浏览器访问的一些头部文件可以直接你***过去使用 。
这里要说一下为什么要做基础的伪装成浏览器 , 由于有了爬虫 , 自然就有反爬虫 。有些网站为了恶意避免爬虫肆意爬取或者进行攻击等等情况 , 会做大量的反爬虫 。伪装浏览器访问是反爬虫的一小步 。
好了我们继续 , 
htmlcontet = requests.get(url, headers=headers, timeout=30)
htmlcontet.raise_for_status()
htmlcontet.encoding = 'utf-8'
returnhtmlcontet.text
排名条如果我们看了Requests之后就知道这是一个解析你传入的url , 并包含了请求头 , 响应延时
第二条 , 如果当前页面响应的情况会返回一个json数据包 , 我们通过这个语法来确认是否为我们要的成功响应的结果
第三条 , 解析格式 , 由于该网站我们可以看到已知字符编码格式为utf-8所以在这里我就写死了是utf-8
较后都没问题后 , 返回一个页面文件出来
第二步:
拿到一个页面文件后 , 我们就需要观察一下该网页的HTML结构
这里介绍一下如何观察一个网页的结构 , 打开F12或者 , 找个空白的位置右键——>检查
我们大概会看到这样的一个情况:
没错你看到那些<body><div>这些就是HTML语言 , 我们爬虫就是要从这些标记里面抓取出我们所需要的内容 。
我们现在要抓取这个1日夜间和2日白天的天气数据出来:
我们首先先从网页结构中找出他们的被包裹的逻辑
很清楚的能看到他们的HTML嵌套的逻辑是这样的:
<div class="con today clearfix">

如何爬虫 爬虫怎么做

文章插图
|
|_____<div class="left fl">
|
|_____<div class="today clearfix" id="today">
|
|______<div class="t">
|
|_____<ul class="clearfix">
|
|_____<li>
|
|_____<li>
我们要的内容都包裹在li里面 , 然后这里我们就要用BeautifulSoup里面的find方法来进行提取查询
我们继续构建一个抓取网页内容的函数 , 由于我们较终要的数据有两条 , 所有我先声明一个weather_list的数组来等会保存我要的结果 。
代码如下:
defget_content(url):
'''
抓取页面天气数据
'''
weather_list = []
html = get_html(url)
soup = bs4.BeautifulSoup(html, 'lxml')
content_ul = soup.find( 'div', class_= 't').find_all( 'li')