excelvba抓取网页数据(如何用Python爬数据?(一)Python进行爬虫抓取数据)
优采云 发布时间: 2021-12-02 10:20excelvba抓取网页数据(如何用Python爬数据?(一)Python进行爬虫抓取数据)
它使用 Python 抓取数据,并与 requests_html 连接。在这篇文章中文章:
如何用Python抓取数据?(一)网页抓取
在此之前,我对网页有一些了解,所以使用起来并不难,但我在理解 Python 语法方面花了一点功夫。
requests_html中的方法和方法名,可以在这里查看:
遇到的主要问题:
使用requests_html的render()时,发现会报错。错误内容:
无法在现有事件循环中使用 HTMLSession。使用 AsyncHTMLSession
一开始参考这个文章试了一下:request-htmlchromium download failed or request-html failed to download Chromium or r.html.render()导致异常错误
它仍然不起作用。这个错误让我头疼了一天,终于发现jupyter Notebook不能用这个方法。这种方法不仅会在jupyter notebook上报错,其他东西也会报错,只要在Anoconda中,比如Spyder,都会报错。
最后自己试了一下,新建了一个hello.py文件。在这个文件中,调用了render()方法,输出没问题。
这是我的代码的一部分:
from requests_html import HTMLSession
session = HTMLSession()
url = 'xxxxxxxxxxxxxxx'
sel = 'xxxxxxxxxxxxxxx'
r = session.get(url)
r.html.render(scrolldown = 4,sleep = 2)
result = r.html.find(sel)
解释render()方法的作用(虽然我自己也不是很懂)
这种方法,我认为是滚动网页。简单来说,有些网页需要加载更多的内容。触发“加载”的是用户滚动到某个位置,或者滚动多少,这样网页自己加载更多的内容,而不是刷新整个页面。
使用requests_html爬取这种网页时,爬取的是“加载更多”之前的网页,数据量往往很小。
而 render(scrolldown = 4,sleep = 2) 可以模拟用户的滚动动作,让网页有更多的内容。
一个简单易懂的例子:
使用r=session.get(url)时,print(r.html.links)捕获的链接数为:10
网页滚动后,这个页面的链接数量会增加到20个。如果不使用r.html.render(scrolldown = 4, sleep = 2)来滚动网页,数量这些链接中的总是 10 个
如果你调用这个语句:.html.render(scrolldown = 4, sleep = 2),那么当你使用print(r.html.links)时,会显示20个链接。