excelvba抓取网页数据(如何用Python爬数据?(一)Python进行爬虫抓取数据)

优采云 发布时间: 2021-12-02 10:20

  excelvba抓取网页数据(如何用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个链接。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线