如何用Python爬取数据,python爬虫数据
网络爬虫是一种程序或脚本,它自动访问互联网上的信息,并根据一定的规则下载内容。下面这篇文章主要分六个步骤向大家介绍如何使用python爬虫抓取数据的相关信息。有需要的朋友可以参考一下。
00-1010前言:python爬出六部曲系列。步骤1:安装请求库和BeautifulSoup库。第二步:获取爬虫所需的头和cookie。第三步:获取网页。第四步:分析网页。第五步:分析获得的信息,简化地址。第6步:抓取内容并清理数据。抓取微博热搜的代码示例并显示结果。总结。
目录
用python爬虫抓取数据真的很简单,只要掌握这六个步骤,并不复杂。我以前觉得爬行动物很难,但是我一上手,不到一个小时就把东西搞定了。
前言:
python爬出六部曲
程序中两个库的编写如下:
导入请求
从bs4导入BeautifulSoup
因为我用的是pycharm的python编程。所以我就说说如何在pycharm上安装这两个库。在主页文件选项下,找到设置。进一步找到项目解释者。之后,在选中框中,点击软件包上的数字,安装查询插件。安装了编译器插件的Hxd有望成为一个好的开始。具体情况如下图所示。
第一步:安装requests库和BeautifulSoup库:
我写了一个抓取微博热搜的爬虫,这里就以它为例吧。获取header和cookie对于一个爬虫来说是必须的,直接决定了爬虫能否准确找到网页的位置进行爬行。
首先进入微博热搜的页面,按F12,页面的js语言设计部分就会出现。如下图所示。在网页上找到网络部分。然后按ctrl R刷新页面。如果正在处理文件信息,则不需要刷新它。当然,刷新一下也没什么不好。然后,我们浏览名称部分,找到我们要抓取的文件,鼠标右键,选择复制,复制网页的URL。如下图所示。
复制完URL后,我们将进入一个网页,将curl命令转换成代码。这个网页可以根据你复制的URL自动生成header和cookie,如下图。生成的头和cookie,直接复制粘贴到程序里就行了。
#爬虫头数据
cookies={
SINAGLOBAL : ,
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 ,
阿帕奇 : 77820254525 ,
超低容量 : 554:153
}
标题={
连接 : 保持活动,
缓存控制 : 最大年龄=0 ,
升级-不安全-请求 : 1 ,
用户代理“:”Mozilla/5.0(Windows NT 10.0;WOW64
) AppleWebKit/537.36 (KHTML, like Gecko) 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,application/signed-exchange;v=b3;q=0.9,
Sec-Fetch-Site: cross-site,
Sec-Fetch-Mode: navigate,
Sec-Fetch-User: ?1,
Sec-Fetch-Dest: document,
Accept-Language: zh-CN,zh;q=0.9,
}
params = (
(cate, realtimehot),
)
复制到程序中就像这样。这是微博热搜的请求头。
第三步:获取网页:
我们将header和cookie搞到手后,就可以将它复制到我们的程序里。之后,使用request请求,就可以获取到网页了。
#获取网页response = requests.get(https://s.weibo.com/top/summary, headers=headers, params=params, cookies=cookies)
第四步:解析网页:
这个时候,我们需要回到网页。同样按下F12,找到网页的Elements部分。用左上角的小框带箭头的标志,如下图,点击网页内容,这个时候网页就会自动在右边显示出你获取网页部分对应的代码。
如上图所示,我们在找到想要爬取的页面部分的网页代码后,将鼠标放置于代码上,右键,copy到selector部分。就如上图所示。
第五步:分析得到的信息,简化地址:
其实刚才复制的selector就相当于网页上对应部分存放的地址。由于我们需要的是网页上的一类信息,所以我们需要对获取的地址进行分析,提取。当然,就用那个地址也不是不行,就是只能获取到你选择的网页上的那部分内容。
#pl_top_realtimehot > table > tbody > tr:nth-child(1) > td.td-02 > a#pl_top_realtimehot > table > tbody > tr:nth-child(2) > td.td-02 > a
#pl_top_realtimehot > table > tbody > tr:nth-child(9) > td.td-02 > a
这是我获取的三条地址,可以发现三个地址有很多相同的地方,唯一不同的地方就是tr部分。由于tr是网页标签,后面的部分就是其补充的部分,也就是子类选择器。可以推断出,该类信息,就是存储在tr的子类中,我们直接对tr进行信息提取,就可以获取到该部分对应的所有信息。所以提炼后的地址为:
#pl_top_realtimehot > table > tbody > tr > td.td-02 > a
这个过程对js类语言有一定了解的hxd估计会更好处理。不过没有js类语言基础也没关系,主要步骤就是,保留相同的部分就行,慢慢的试,总会对的。
第六步:爬取内容,清洗数据
这一步完成后,我们就可以直接爬取数据了。用一个标签存储上面提炼出的像地址一样的东西。标签就会拉取到我们想获得的网页内容。
#爬取内容content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"
之后我们就要soup和text过滤掉不必要的信息,比如js类语言,排除这类语言对于信息受众阅读的干扰。这样我们就成功的将信息,爬取下来了。
fo = open("./微博热搜.txt",a,encoding="utf-8")a=soup.select(content)
for i in range(0,len(a)):
a[i] = a[i].text
fo.write(a[i]+\n)
fo.close()
我是将数据存储到了文件夹中,所以会有wirte带来的写的操作。想把数据保存在哪里,或者想怎么用,就看读者自己了。
爬取微博热搜的代码实例以及结果展示:
import osimport requests
from bs4 import BeautifulSoup
#爬虫头数据
cookies = {
SINAGLOBAL: 6797875236621.702.1603159218040,
SUB: _2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V,
SUBP: 0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ,
_s_tentry: www.baidu.com,
UOR: www.hfut.edu.cn,widget.weibo.com,www.baidu.com,
Apache: 7782025452543.054.1635925669528,
ULV: 1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256,
}
headers = {
Connection: keep-alive,
Cache-Control: max-age=0,
Upgrade-Insecure-Requests: 1,
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) 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,application/signed-exchange;v=b3;q=0.9,
Sec-Fetch-Site: cross-site,
Sec-Fetch-Mode: navigate,
Sec-Fetch-User: ?1,
Sec-Fetch-Dest: document,
Accept-Language: zh-CN,zh;q=0.9,
}
params = (
(cate, realtimehot),
)
#数据存储
fo = open("./微博热搜.txt",a,encoding="utf-8")
#获取网页
response = requests.get(https://s.weibo.com/top/summary, headers=headers, params=params, cookies=cookies)
#解析网页
response.encoding=utf-8
soup = BeautifulSoup(response.text, html.parser)
#爬取内容
content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"
#清洗数据
a=soup.select(content)
for i in range(0,len(a)):
a[i] = a[i].text
fo.write(a[i]+\n)
fo.close()
总结
到此这篇关于如何用六步教会你使用python爬虫爬取数据的文章就介绍到这了,更多相关python爬虫爬取数据内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。