vb抓取网页内容(Python显示results结果数据对应的内容(图))

优采云 发布时间: 2021-12-10 14:17

  vb抓取网页内容(Python显示results结果数据对应的内容(图))

  就像你要寄包裹给某人一样,你可以在“省-市-区-街道-社区-门牌”的结构中写一个地址,快递员也可以根据这个地址找到收件人。

  同样,我们对网页上的一些特定内容感兴趣,我们可以根据这些标签的结构找出来。

  这是否意味着您必须先学习 HTML 和 CSS,然后才能抓取网页内容?

  不,我们可以使用工具来帮助您显着简化任务的复杂性。

  此工具随 Google Chrome 浏览器一起提供。

  我们在示例文章页面点击鼠标右键,在出现的菜单中选择“Check”。

  

  这时,屏幕下方会出现一列。

  

  我们单击此列左上角的按钮(上面标记为红色)。然后将鼠标悬停在第一个文本链接(“玉树之蓝”)上并单击一次。

  

  此时,你会发现下栏的内容也发生了变化。这个链接对应的源码放在栏目区域的中间,并高亮显示。

  

  确认该区域是我们要找的链接和文字说明后,我们用鼠标右键选中突出显示的区域,在弹出的菜单中选择Copy -> Copy selector。

  

  找个文本编辑器,执行paste,就可以看到我们复制的内容了。

  body > div.note > div.post > div.article > div.show-content > div > p:nth-child(4) > a

  这长串标签为电脑指出:请先找到body标签,进入管辖区域后,寻找div.note标签,然后找到...终于找到a标签,这里是您正在寻找的内容。

  回到我们的 Jupyter Notebook 并使用我们刚刚定义的变量 sel 的标签路径。

  sel = 'body > div.note > div.post > div.article > div.show-content > div > p:nth-child(4) > a'

  我们让Python从返回的内容中找到sel对应的位置,并将结果存入results变量中。

  results = r.html.find(sel)

  让我们看看结果如何。

  results

  这是结果:

  []

  结果是一个仅收录一项的列表。此项收录一个网址,即我们要查找的第一个链接(“玉树知兰”)对应的网址。

  但文字描述“《玉树知兰》”去哪儿了?

  别着急,我们让Python显示结果数据对应的文字。

  results[0].text

  这是输出:

  '玉树芝兰'

  我们还提取了链接:

  results[0].absolute_links

  显示的结果是一个集合。

  {'https://www.jianshu.com/nb/130182'}

  我们不需要集合,只需要其中的链接字符串。所以我们先把它转换成一个列表,然后从中提取第一项,即URL链接。

  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

  我们来测试一下这个功能。

  还是用刚才的标记路径(sel),试试看。

  print(get_text_link_from_sel(sel))

  输出如下:

  [('玉树芝兰', 'https://www.jianshu.com/nb/130182')]

  没问题吧?

  好的,让我们尝试第二个链接。

  我们还是用刚才的方法,使用下栏左上角的按钮,点击第二个链接。

  

  下面显示的突出显示的内容已更改:

  

  我们仍然使用鼠标右键单击突出显示的部分来复制选择器。

  

  然后我们直接将获取到的标签路径写入到 Jupyter Notebook 中。

  sel = 'body > div.note > div.post > div.article > div.show-content > div > p:nth-child(6) > a'

  用我们刚刚编译的函数看看输出结果是什么?

  print(get_text_link_from_sel(sel))

  输出如下:

  [('如何用Python做词云?', 'https://www.jianshu.com/p/e4b24a734ccc')]

  经检查,功能没有问题。

  下一步是什么?

  还是要找第三个链接,模仿刚才的方法?

  那你还不如手动从全文中提取信息,省去你的麻烦。

  我们必须找到一种方法来自动化这个过程。

  比较我们只找到两次的标记路径:

  body > div.note > div.post > div.article > div.show-content > div > p:nth-child(4) > a

  也:

  body > div.note > div.post > div.article > div.show-content > div > p:nth-child(6) > a

  你发现了什么模式?

  是的,路径上的所有其他标记都相同,除了倒数第二个标记(“p”)之后冒号之后的内容。

  这是我们自动化的关键。

  上述两个标签路径中,因为指定了第n个子文本段(段落,即“p”的意思)来查找标签“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))

  我们来看一下数据框的内容:

  df

  

  内容还可以,但是我们对标题不满意,所以我们必须用更有意义的列名替换它:

  df.columns = ['text', 'link']

  看一下数据框的内容:

  df

  

  好的,现在您可以将捕获的内容输出到 Excel。

  Pandas 的内置命令可以将数据框转换为 csv 格式,可以直接用 Excel 打开查看。

  df.to_csv('output.csv', encoding='gbk', index=False)

  注意编码需要指定为gbk,否则在Excel中查看默认的utf-8编码可能会出现乱码。

  我们来看看生成的 csv 文件。

  

  很有成就感不是吗?

  概括

  本文将向您展示使用 Python 自动爬网的基本技巧。希望通过阅读和动手实践,您可以掌握以下知识点:

  可能你觉得这个文章太简单了,满足不了你的要求。

  文章只展示了如何从一个网页中抓取信息,但您必须处理数千个网页。

  别担心。

  本质上,抓取一个网页与抓取 10,000 个网页是一样的。

  而且,根据我们的示例,您是否已经尝试过获取链接?

  以链接为基础,您可以滚雪球,让 Python 爬虫“爬行”到已解析的链接以进行进一步处理。

  以后在实际场景中,你可能要处理一些棘手的问题:

  这些问题的解决方法,希望在以后的教程中与大家一一分享。

  需要注意的是,虽然网络爬虫抓取数据的能力很强,但是学习和实践也有一定的门槛。

  当您面临数据采集任务时,您应该首先查看此列表:

  如果答案是否定的,则需要自己编写脚本并调动爬虫来抓取它。

  为了巩固你所学的知识,请切换到另一个网页,根据我们的代码进行修改,抓取你感兴趣的内容。

  如果能记录下自己爬的过程,在评论区把记录链接分享给大家就更好了。

  因为刻意练习是掌握实践技能的最佳途径,而教学是最好的学习。

  祝你好运!

  思考

  已经解释了本文的主要内容。

  这里有一个问题供您思考:

  我们解析和存储的链接实际上是重复的:

  

  这不是因为我们的代码有问题,而是在《如何使用“玉树智兰”开始数据科学?"文章中,我多次引用了一些文章,所以重复的链接都被抓了

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线