c爬虫抓取网页数据(Python显示results结果数据对应的文本和链接(图))
优采云 发布时间: 2021-12-30 17:27c爬虫抓取网页数据(Python显示results结果数据对应的文本和链接(图))
默认会安装 html, js, css, python3, Anaconda, python3, Google Chrome,
爬虫的定义
即使打开浏览器手动复制数据,也称为网页抓取。
使用程序(或机器人)自动为您完成网页抓取工作,称为爬虫。
网页的数据是什么?
通常,首先将其存储并放置在数据库或电子表格中以供检索或进一步分析。
所以,你真正想要的功能是这样的:
找到链接,获取网页,抓取指定信息,并存储。
这个过程可能会反过来,甚至滚雪球。
您想以自动化的方式完成它。
抓取文本和链接
例如,这是一个网页
我们希望抓取的内容如下
让我们开始操作
# 启动 Google Chrome
pipenv shell
# 启动 jupyter
jupyter notebook
from requests_html import HTMLSession
# 建立一个会话(session)
session = HTMLSession()
# 获取网页内容,html格式的
url = 'https://www.jianshu.com/p/85f4624485b9'
r = session.get(url)
# 仅显示文字部分
print(r.html.text)
# 仅显示网页内的链接(相对链接)
print(r.html.links)
# 显示绝对链接
print(r.html.absolute_links)
抓取指定的内容和链接
右键点击网页,选择“检查”,可以看到网页的源代码,在源代码的左上角有一个选择器可以选择你想要的内容。
选中内容的源代码会高亮显示,然后鼠标右击选择“复制”>“复制选择器”复制选择器
找到一个文本编辑器,粘贴它,看看复制了什么
body > div.note > div.post > div.article > div.show-content > div > p:nth-child(4) > a
让我们看看如何使用它
sel = 'body > div.note > div.post > div.article > div.show-content > div > p:nth-child(4) > a'
results = r.html.find(sel)
print(results)
下面是输出
[]
结果是一个仅收录
一项的列表。此项收录
一个网址,即我们要查找的第一个链接(“玉树知兰”)对应的网址。
但文字描述“《玉树知兰》”去哪儿了?
别着急,我们让Python显示结果数据对应的文字。
print(results[0].text)
# '玉树芝兰'
# 提取链接
results[0].absolute_links
# 显示一个集合
# {'https://www.jianshu.com/nb/130182'}
# 集合转列表
print(list(results[0].absolute_links)[0])
# 'https://www.jianshu.com/nb/130182'
有了处理这第一个环节的经验,你就有了很多信心,对吧?
其他的链接无非就是找到标记的路径,然后拍猫和虎的照片。
但是,如果每次找到链接都需要手动输入这些句子,那就太麻烦了。
这里是编程技巧。一一重复执行的语句。如果工作顺利,我们会尝试将它们合并在一起并制作一个简单的功能。
对于这个函数,只要给出一个选择路径(sel),它就会把它找到的所有描述文本和链接路径返回给我们
def get_text_link_from_sel(sel):
mylist = []
try:
results = r.html.find(sel)
for result in results:
mytext = result.text
mylink = list(result.absolute_links)[0]
# 这里多了一个括号
mylist.append((mytext, mylink))
return mylist
except:
return None
下面测试这个小程序
print(get_text_link_from_sel(sel))
# [('玉树芝兰', 'https://www.jianshu.com/nb/130182')]
数据再处理
复制其他链接,与上面链接不同的是p:nth-child(4)> a中括号内的数字)
如果我们不限制“p”的具体位置信息呢?
让我们试试吧。这次保留标记路径中的所有其他信息,只修改“p”点。
sel = 'body > div.note > div.post > div.article > div.show-content > div > p > a'
print(get_text_link_from_sel(sel))
嗯,我们要找的所有内容都在这里。
然而,我们的工作还没有结束。
我们必须将采集
到的信息导出到 Excel 并保存。
还记得我们常用的数据框工具 Pandas 吗?是时候让它再次展现它的神奇力量了。
import pandas as pd
df = pd.DataFrame(get_text_link_from_sel(sel))
print(df)
内容还可以,但是我们对标题不满意,所以我们必须用更有意义的列名替换它:
df.columns = ['text', 'link']
print(df)
好的,现在您可以将捕获的内容输出到 Excel。
Pandas 的内置命令可以将数据框保存为 csv 格式,这种格式可以直接用 Excel 打开查看。
df.to_csv('output.csv', encoding='gbk', index=False)
注意编码需要指定为gbk,否则在Excel中查看默认的utf-8编码可能会出现乱码。
我们来看看生成的 csv 文件。
概括
本文将向您展示使用 Python 自动爬网的基本技巧。希望通过阅读和动手实践,您可以掌握以下知识点:
或许你觉得这篇文章过于简单,无法满足你的要求。
文章只展示了如何从一个网页中抓取信息,但您必须处理数千个网页。
别担心。
本质上,抓取一个网页与抓取 10,000 个网页是一样的。
而且,根据我们的示例,您是否已经尝试过获取链接?
以链接为基础,您可以滚雪球,让 Python 爬虫“爬行”到已解析的链接以进行进一步处理。
以后在实际场景中,你可能要处理一些棘手的问题:
需要注意的是,虽然网络爬虫抓取数据的能力很强,但是学习和实践也有一定的门槛。
当您面临数据采集任务时,您应该首先查看此列表:
如果答案是否定的,则需要自己编写脚本并调动爬虫来抓取它。
为了巩固你所学的知识,请切换到另一个网页,根据我们的代码进行修改,抓取你感兴趣的内容。
如果能记录下自己爬的过程,在评论区把记录链接分享给大家就更好了。
因为刻意练习是掌握实践技能的最佳途径,而教学是最好的学习。