网络爬虫是一种程序或脚本,它自动访问互联网上的信息,并根据一定的规则下载内容。下面这篇文章主要分六个步骤向大家介绍如何使用python爬虫抓取数据的相关信息。有需要的朋友可以参考一下。
目录
前言:python爬出六部曲系列。步骤1:安装requests库和BeautifulSoup库。第二步:获取爬虫所需的头和cookie。第三步:获取网页。第四步:分析网页。第五步:分析获得的信息,简化地址。第六步:抓取内容,清理数据。抓取微博热搜的代码示例并显示结果。
前言:
用python爬虫抓取数据真的很简单,只要掌握这六个步骤,并不复杂。我以前觉得爬行动物很难,但是我一上手,不到一个小时就把东西搞定了。
python爬出六部曲
第一步:安装requests库和BeautifulSoup库:
程序中两个库的编写如下:
导入请求
从bs4导入BeautifulSoup
因为我用的是pycharm的python编程。所以我就说说如何在pycharm上安装这两个库。在主页文件选项下,找到设置。进一步找到项目解释者。之后,在选中框中,点击软件包上的数字,安装查询插件。安装了编译器插件的Hxd有望成为一个好的开始。具体情况如下图所示。
第二步:获取爬虫所需的header和cookie:
我写了一个抓取微博热搜的爬虫,这里就以它为例吧。获取header和cookie对于一个爬虫来说是必须的,直接决定了爬虫能否准确找到网页的位置进行爬行。
首先进入微博热搜的页面,按F12,页面的js语言设计部分就会出现。如下图所示。在网页上找到网络部分。然后按ctrl R刷新页面。如果正在处理文件信息,则不需要刷新它。当然,刷新一下也没什么不好。然后,我们浏览名称部分,找到我们要抓取的文件,鼠标右键,选择复制,复制网页的URL。如下图所示。
复制完URL后,我们将进入一个网页,将curl命令转换成代码。这个网页可以根据你复制的URL自动生成header和cookie,如下图。生成的头和cookie,直接复制粘贴到程序里就行了。
#爬虫头数据
cookies={
Sina global ':' 679787523661 ',
SUB ':' _ 2 akmxbqmsf 8 nxqwjrmfktzmnhboh 1 ygveiekhmljrmxhrl-yt9 jqmg 8 TRB 6 po 6n _ Rc _ 2 fhpezf 2 ithyo 9 dfklugpv 4v ',
SUBP ':' 0033 wrsxqpxfm 72-ws 9 jqgmf 55529 p9d 9 wh-nU-qnds 1 fu 27 p 6 nmwwij ',
_s_tentry': 'www.baidu.com ',
UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com ',
“阿帕奇”:“77820254527”,
ULV ':' 1635925669554:15:1:1:7782025452543:1625669528:16687756 ',
}
标题={
连接':'保持活动',
Cache-Control': 'max-age=0 ',
升级-不安全-请求':' 1 ',
用户代理':' Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/84 . 0 . 4147 . 89 Safari/537.36 SLBrowser/7 . 0 . 0 . 6241 SLBChan/25 ',
Accept': 'text/html,application/xhtml xml,application/xml。q=0.9,image/webp,image/apng,*/*;q=0.8,应用/签约-交换;v=b3q=0.9 ',
Sec-Fetch-Site ':'跨站点',
Sec-Fetch-Mode ':'导航',
Sec-Fetch-User ':'?1',
Sec-Fetch-Dest': 'document ',
接受-语言':' zh-CN,zh;q=0.9 ',
}
params=(
(' cate ',' realtimehot '),
)
像这样复制到程序里。这是微博热搜的要求。
第三步:获取网页:
在我们得到头文件和cookie之后,我们可以把它复制到我们的程序中。之后,使用request请求获取网页。
#获取网页
response=requests . get(' https://s . Weibo . com/top/summary ',headers=headers,params=params,cookies=cookies)
第四步:解析网页:
这时候我们需要回到网页。再次按F12查找网页的元素部分。使用左上角带箭头标记的小方框,如下图所示,点击网页内容。这时网页会自动在右边显示你获取的网页对应的代码。
如上图所示,我们找到要抓取的那部分页面的网页代码后,把鼠标放在代码上,点击右键,复制到选择器部分。如上图所示。
第五步:分析得到的信息,简化地址:
实际上,刚刚复制的选择器相当于存储在网页相应部分的地址。因为我们需要的是网页上的一种信息,所以需要对获取的地址进行分析提取。当然也不是不能用那个地址,就是只能得到你选择的网页上的那部分内容。
#pl_top_realtimehot表tbody tr:n-child(1)TD . TD-02 a
#pl_top_realtimehot表tbody tr:n-child(2)TD . TD-02 a
#pl_top_realtimehot表tbody tr:n-child(9)TD . TD-02 a
这是我得到的三个地址。我可以发现三个地址有很多相似的地方,唯一不同的是tr部分。由于tr是一个网页标签,下面的部分就是它的补充部分,也就是子类选择器。可以推断,这类信息存储在tr的子类中,我们可以直接从tr中提取信息,得到这部分对应的所有信息。所以精确的地址是:
#pl_top_realtimehot表tbody tr td.td-02 a
这个过程对类似js的语言有一些了解,hxd估计比较好处理。但是,没有类似js的语言基础也没关系。主要步骤是保持相同的部分。慢慢尝试,总会对的。
第六步:爬取内容,清洗数据
这一步完成后,我们就可以直接抓取数据了。使用标签来存储从标签中提取的地址之类的东西。标签将会拉向我们想要的网页内容。
#爬网内容
content=' # pl _ top _ real time hot table tbody tr TD . TD-02 a '
之后需要汤和文字过滤掉不必要的信息,比如类似js的语言,排除这类语言对信息受众阅读的干扰。就这样,我们成功地把信息爬了下来。
Fo=open('。/微博热搜. txt ',' a ',编码=' UTF-8 ')
a=soup.select(内容)
对于范围内的I(0,len(a)):
a[i]=a[i]。文本
fo.write(a[i] '\n ')
fo.close()
我把数据存储在文件夹里,所以会有wirte带来的写操作。你想把数据保存在哪里,或者你想如何使用它,取决于读者自己。
爬取微博热搜的代码实例以及结果展示:
导入操作系统
导入请求
从bs4导入BeautifulSoup
#爬虫头数据
cookies={
Sina global ':' 679787523661 ',
SUB ':' _ 2 akmxbqmsf 8 nxqwjrmfktzmnhboh 1 ygveiekhmljrmxhrl-yt9 jqmg 8 TRB 6 po 6n _ Rc _ 2 fhpezf 2 ithyo 9 dfklugpv 4v ',
SUBP ':' 0033 wrsxqpxfm 72-ws 9 jqgmf 55529 p9d 9 wh-nU-qnds 1 fu 27 p 6 nmwwij ',
_s_tentry': 'www.baidu.com ',
UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com ',
“阿帕奇”:“77820254527”,
ULV ':' 1635925669554:15:1:1:7782025452543:1625669528:16687756 ',
}
标题={
连接':'保持活动',
Cache-Control': 'max-age=0 ',
升级-不安全-请求':' 1 ',
用户代理':' Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/84 . 0 . 4147 . 89 Safari/537.36 SLBrowser/7 . 0 . 0 . 6241 SLBChan/25 ',
Accept': 'text/html,application/xhtml xml,application/xml。q=0.9,image/webp,image/apng,*/*;q=0.8,应用/签约-交换;v=b3q=0.9 ',
Sec-Fetch-Site ':'跨站点',
Sec-Fetch-Mode ':'导航',
Sec-Fetch-User ':'?1',
Sec-Fetch-Dest': 'document ',
接受-语言':' zh-CN,zh;q=0.9 ',
}
params=(
(' cate ',' realtimehot '),
)
#数据存储
Fo=open('。/微博热搜. txt ',' a ',编码=' UTF-8 ')
#获取网页
response=requests . get(' https://s . Weibo . com/top/summary ',headers=headers,params=params,cookies=cookies)
#解析网页
response.encoding='utf-8 '
soup=beautiful soup(response . text,' html.parser ')
#爬网内容
content=' # pl _ top _ real time hot table tbody tr TD . TD-02 a '
#清理数据
a=soup.select(内容)
对于范围内的I(0,len(a)):
a[i]=a[i]。文本
fo.write(a[i] '\n ')
fo.close()
总结
关于如何使用python crawler六步爬取数据的文章到此结束。关于python爬虫抓取数据的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。