使用[爬虫]来爬取数据是很简单的事情。只要掌握以下六步就可以了,并且也不复杂。之前一直以为爬虫很难,然而一旦开始动手操作,从刚开始学习到成功把东西爬下来,仅仅一个小时不到就能够完成。
爬出六部曲 第一步:安装库和库:
在程序中两个库的书写是这样的:
import requests
from bs4 import BeautifulSoup
我使用的是进行编程,所以来讲讲在上安装这两个库的方法。首先在主页面文件选项下找到设置,接着找到项目解释器,然后在所选框中点击软件包上的+号,就可以进行查询插件安装了。有过编译器插件安装经验的 hxd 估计会比较好入手,具体情况如下图所示。
第二步:获取爬虫所需的和:
我写了一个能够爬取微博热搜的爬虫程序,现在就以它为例来进行说明。获取信息和定位网页位置是一个爬虫程序必须具备的能力,因为这直接决定了爬虫程序能否准确地找到网页位置并进行爬取。
进入微博热搜的页面后,按下 F12 ,此时会出现网页的 js 语言设计部分。(如下图所示)接着找到网页上的部分,然后按下 ctrl+R 刷新页面。如果有文件信息,就无需刷新,即便刷新也没什么问题。之后,我们浏览 Name 这部分,找到想要爬取的文件,用鼠标右键选择 copy ,复制下网页的 URL 。(如下图所示)
复制好 URL 之后,我们会进入一个名为“curl to code”的网页。这个网页具备这样的功能,它能够依据你所复制的 URL,自动生成相应的内容,就如同下面所展示的那样。生成好的内容,你直接复制走就可以了,然后粘贴到程序当中。
#爬虫头数据
cookies = {
'SINAGLOBAL' 的值为 '6797875236621.702.1603159218040'
'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”的意思是“保持活跃”。
“Cache-Control”的值为“max-age=0”。
'Upgrade-Insecure-Requests' 的值为 '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',其中 'application/xml' 的质量因子为 0.9,还有 'image/webp'、'image/apng' 等,它们的质量因子均为 0.8,以及 'application/signed-exchange',其质量因子为 0.9,质量因子 'q' 用于表示各种类型资源的优先级。
'Sec-Fetch-Site' 表示 '跨站点'
'Sec-Fetch-Mode' 的值为 'navigate' 。
'Sec-Fetch-User' 的值为 '?1' 。
'Sec-Fetch-Dest' 的值为 'document' 。
'Accept-Language' 为 'zh-CN' 且 'zh;q=0.9' 。
}
params = (
('cate', 'realtimehot') 可改写为:('cate'这个词),('realtimehot'这个词)
)
复制到程序中就像这样。这是微博热搜的请求头。
第三步:获取网页:
我们拿到它之后,就能够把它复制到我们的程序中。接着,通过使用请求,就可以获取到网页了。
#获取网页
使用 requests 库发送一个 GET 请求,请求的 URL 是 'https://s.weibo.com/top/summary',同时设置了请求头 headers、请求参数 params 和 cookies,将返回的响应赋值给 response 变量。
第四步:解析网页:
这个时候,我们得回到网页。接着再次按下 F12 这个按键。然后去找到网页的那部分。利用左上角带有箭头的小框标志,就像下面的图那样。接着点击网页内容。在这个时候,网页就会自动在右边把你获取网页部分所对应的代码显示出来。
我们找到想要爬取的页面部分的网页代码后,把鼠标放在代码上,然后右键,复制到相应部分。就如同上图所展示的那样。
第五步:分析得到的信息,简化地址:
其实刚才复制的东西就和网页上对应部分所存放的地址是一样的。因为我们需要的是网页上的某一类信息,所以就需要对获取到的地址进行分析和提取。当然,如果仅仅使用那个地址也是可以的,只是那样只能获取到你所选择的网页上的那部分内容。
#pl_top_realtimehot 指向的表格的 tbody 中的 tr 元素的第 1 个子元素 tr:nth-child(1) 的 td 元素中的 td-02 类的 a 元素。
#pl_top_realtimehot 中的 table 里的 tbody 中的 tr 的第二个子元素 td.td-02 里的 a
#pl_top_realtimehot 中的 table 里的 tbody 中的 tr 里的第 9 个 tr 元素的 td.td-02 中的 a 元素
我获取了三条地址,能发现三个地址有很多相同之处,唯一不同的是 tr 部分。因为 tr 是网页标签,其后面部分是补充的,即子类选择器。由此可推断,该类信息存储在 tr 的子类中,我们直接对 tr 进行信息提取,就能获取到该部分对应的所有信息。所以提炼后的地址为:
语言风格需保持原文风格,去掉最前面的序号,将长句拆分成多个小分句,分句越短越好。具体来说,就是要对给定的内容进行改写,避免使用原文用过的词语,可对句子结构和用词进行调整、充实,以达到差异最大化,同时要保留原意,禁止修改专有名词,禁止穿插英文单词,只给出改写结果。
对于有一定 js 类语言知识的 hxd 来说,这个过程可能会更好处理。然而,即便没有 js 类语言基础也无妨,主要的步骤就是保留相同部分,慢慢尝试,最终总能做对。
第六步:爬取内容,清洗数据
这一步完成之后,我们便能够直接进行数据爬取了。将上面提炼出的类似地址的东西用一个标签来存储。通过这个标签,就可以拉取到我们想要获取的网页内容。
#爬取内容
语言风格需保持原文风格,去掉最前面的序号,将长句拆分成多个小分句,分句越短越好。具体内容为“#pl_top_realtimehot > table > tbody > tr > td.td-02 > a”。
之后我们要对 soup 和 text 进行过滤,把不必要的信息去除,例如 js 类语言。通过这种方式,排除这类语言对信息受众阅读造成的干扰,从而成功地将信息爬取下来。
打开文件“./微博热搜.txt”,以追加模式“a”打开,编码设置为“utf-8”,并将文件对象赋值给变量 fo 。
a=soup.select(content)
for i in range(0,len(a)):
a[i] = a[i].text
fo.write(a[i]+'\n')
fo.close()
我将数据存储到了文件夹里,这样就会有写的操作。至于数据要保存在何处,以及如何使用,就由读者自己决定了。
爬取微博热搜的代码实例以及结果展示:
import os
import 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 的编码为 'utf-8'。
使用 'html.parser' 对 response.text 进行解析,得到的结果赋值给 soup 。
#爬取内容
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()
关于技术储备
学好的话,无论是用于就业还是做副业赚钱都很不错。不过,要想学好,还是需要有一个学习规划。最后,大家分享一份全套的学习资料,给那些想要学习的小伙伴们提供一些帮助。
朋友们若需要这份完整的资料,可通过微信扫描下方 CSDN 官方认证二维码来免费领取,此领取方式保证 100%免费。
一、学习大纲
对所有方向的技术点进行整理,从而形成各个领域的知识点汇总。其用处在于,你能够依据上面的知识点去寻找对应的学习资源,以此确保自己学习得较为全面。
二、必备开发工具
三、入门学习视频
四、实战案例
光学理论本身并无实际用处,我们需要学会动手实践,跟着一起进行操作。只有通过实际动手,才能将所学的光学理论运用到实际中去。在这个过程中,我们可以寻找一些实战案例来进行学习。
五、副业兼职与全职路线
CSDN 提供大礼包,包含《兼职资源&全套学习资料》,并且可以免费分享,此链接安全,可放心点击。
版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;
工作时间:8:00-18:00
客服电话
0755-888866601
电子邮件
wx888866603@qq.com
扫码二维码
获取最新动态