联博统计接口(326681.com)_爬虫基本功就这?早知道学爬虫了
发表时间:2020-12-24 浏览量:6
爬虫基本功就这?早知道学爬虫了
文章分三个个部门
- 两个爬虫库requests和selenium若何使用
- html剖析库BeautifulSoup若何使用
- 动态加载的网页数据用requests怎么抓
两个爬虫库
requests
假设windows下安装好了python和pip。
下面用pip安装爬虫库requests
若是提醒pip版本低,不建议升级,升级后可能python自己版本低,导致pip指令报错。
进入Python命令行验证requests库是否能够使用
看到import requests和requests.get函数都没有报错,说明安装乐成可以开发我们的第一个爬虫程序了!
将代码文件命名为test.py,用IDEL打开。
最简朴的爬虫就这么几行!
- 引入requests库,
- 用get函数接见对应地址,
- 判断是否抓取乐成的状态,r.text打印出抓取的数据。
然后菜单栏点击Run->Run Module 会弹出Python的命令行窗口,而且返回效果。我们接见的是腾讯公布新冠肺炎疫情的地址
若是没有IDEL,直接cmd命令行运行根据下面执行
selenium
selenium库会启动浏览器,用浏览器接见地址获取数据。下面我们演示用selenium抓取网页,并剖析爬取的html数据中的信息。先安装selenium
接下来安装剖析html需要的bs4和lxml。
安装bs4
安装lxml
要确保windows环境变量path的目录下有chromedriver
我d盘的instantclient_12_2已经加到path里了。以是chromedriver解压到这个目录。chromedriver差别的版本对应Chrome浏览器的差别版本,最先我下载的chromedriver对应Chrome浏览器的版本是71-75(图中最下面的),我的浏览器版本是80以是重新下载了一个才好使。
代码如下
Python执行历程中会弹出
浏览器也自动启动,接见目的地址
IDEL打印效果如下
HTML剖析库BeautifulSoup
selenium例子中爬取数据后使用BeautifulSoup库对html举行剖析,提取了感兴趣的部门。若是不剖析,抓取的就是一整个html数据,有时也是xml数据,xml数据对标签的剖析和html是一样的原理,两者都是<tag>来区分数据的。这种花样的数据结构一个页面一个样子,剖析起来很贫苦。BeautifulSoup提供了壮大的剖析功效,可以辅助我们省去不少贫苦。
使用之前安装BeautifulSoup和lxml。
首先代码要引入这个库(参考上面selenium库代码)
from bs4 import BeautifulSoup
然后,抓取
r = request.get(url)
r.encoding='utf8'
html=r.read() #urlopen获取的内容都在html中
mysoup=BeautifulSoup(html, 'lxml') #html的信息都在mysoup中了
假设我们对html中的如下部门数据感兴趣
<data>
<day>20200214</day>
<id>1</id>
<rank>11</rank>
<name>张三</name>
</data>
<data>
<day>20200214</day>
<id>4</id>
<rank>17</rank>
<name>李斯</name>
</data>
首先要找到tag标签为<data>的数据,而这类数据不止一条,我们以两条为例。那么需要用到beautifulsoup的find_all函数,返回的效果应该是两个<data>数据。当处置每一个<data>数据时,内里的<id><name>等标签都是唯一的,这时使用find函数。
,,www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。
mysoup=BeautifulSoup(html, 'lxml')
data_list=mysoup.find_all('data')
for data in data_list:#list应该有两个元素
day = data.find('day').get_text() #get_text是获取字符串,可以用.string取代
id = data.find('id').get_text()
rank = data.find('rank').get_text()
name = data.find('name').get_text()
#print name 可以print测试剖析效果
这是beautifulsoup最简朴的用法,find和find_all不仅可以根据标签的名字定位元素,还可以根据class,style等种种属性,以及文本内容text作为条件来查找你感兴趣的内容,异常壮大。
requests库若何抓取网页的动态加载数据
还是以新冠肺炎的疫情统计网页为例。本文开头requests例子最后打印的效果内里只有题目、栏目名称之类的,没有累计确诊、累计殒命等等的数据。由于这个页面的数据是动态加载上去的,不是静态的html页面。需要根据我上面写的步骤来获取数据,关键是获得URL和对应参数formdata。下面以火狐浏览器讲讲若何获得这两个数据。
肺炎页面右键,泛起的菜单选择检查元素。
点击上图红色箭头网络选项,然后刷新页面。如下,
这里会泛起许多网络传输纪录,考察最右侧红框“巨细”那列,这列示意这个http请求传输的数据量巨细,动态加载的数据一样平常数据量会比其它页面元素的传输大,119kb相比其它按字节盘算的算是很大的数据了,固然网页的装饰图片有的也很大,这个需要根据文件类型那列来甄别。
url带参数
然后点击域名列对应那行,如下
可以在新闻头中瞥见请求网址,url的尾部问号后面已经把参数写上了。
途中url注释,name是disease_h5,callback是页面回调函数,我们不需要有回调动作,以是设置为空,_对应的是时间戳(Python很容易获得时间戳的),由于查询肺炎患者数目和时间是慎密相关的。
我们若是使用带参数的URL,那么就用
url='网址/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(stamp*1000)
requests.get(url)
url和参数星散
点击参数可以瞥见url对应的参数
若是使用参数和url星散的形式那么
那么就这样
url="网址/g2/getOnsInfo"
formdata = {'name': 'disease_h5',
'callback': '',
'_': 当前时间戳
}
requests.get(url, formdata)
找url和参数需要耐心剖析,才气准确甄别url和参数的寄义,举行准确的编程实现。参数是否可以空,是否可以硬编码写死,是否有特殊要求,对照依赖履历。
总结
学完本文,阅读爬虫代码就很容易了,所有代码都是为了乐成get到url做的准备以及抓到数据之后的剖析而已。
有的url很简朴,返回一个.dat文件,内里直接就是json花样的数据。有的需要设置大量参数,才气获得,而且获得的是html花样的,需要剖析才气提取数据。
爬到的数据可以存入数据库,写入文件,也可以现抓现展示不存储。
你的激励让我更有动力
赞赏
0人举行了赞赏支持
0
珍藏