【问题标题】:How to use selenium with scrapy for crawling a certain webpage?如何使用 selenium 和 scrapy 抓取某个网页?
【发布时间】:2018-01-24 14:08:10
【问题描述】:

问题是网站中的某些部分无法通过scrapy直接抓取。因此,我需要使用selenium来渲染页面源,以便我可以访问某些内容。

我试过这个:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
print(driver.page_source)

我没有在结果页面源中发现某些内容, 虽然我可以通过driver.find_element_by_css_selector()获取内容

为什么会这样? 以及如何使用 selenium 和 scrapy 来抓取某个网站,例如:http://tieba.baidu.com/p/5513911529,

我遇到的困难在下图中,红圈内,我需要里面的文字内容

感谢您的帮助,或者至少给我一个文档来阅读。

【问题讨论】:

  • 请阅读为什么是screenshot of HTML or code or error is a bad idea。考虑使用基于格式化文本的 HTML 和代码试验来更新问题。
  • 我有困难的部分...你能详细说说那些困难吗?
  • @Andersson 我无法直接使用scrapy css选择器获取那些内容,从scrapy的角度来看那部分内容是不存在的,可能是因为它是一个动态页面?
  • 没有。此内容似乎是静态的。你能分享你的 CSS 选择器吗?
  • @Andersson 是的,这里是:'#j_p_postlist > div:nth-child(16) > div.d_post_content_main > div.core_reply.j_lzl_wrapper > div.j_lzl_container.core_reply_wrapper > div.j_lzl_c_b_a.core_reply_content > ul > li:nth-child(4) > div > span'。我可以使用与 selenium.webdriver.find_element_by_css_selector() 方法完全相同的选择器来获取文本,但不能使用 scrapy 的 response.css() 方法。

标签: javascript python html selenium scrapy


【解决方案1】:

内容将在用户向下滚动后显示。所以你必须使用 JS Executor 向下滚动。请参阅下面的代码。

driver.get('http://tieba.baidu.com/p/5513911529')
SCROLL_PAUSE_TIME = 0.5
SCROLL_LENGTH = 200
page_height = int(driver.execute_script("return document.body.scrollHeight"))
scrollPosition = 0
while scrollPosition < page_height:
    scrollPosition = scrollPosition + SCROLL_LENGTH
    driver.execute_script("window.scrollTo(0, " + str(scrollPosition) + ");")
    time.sleep(SCROLL_PAUSE_TIME)

time.sleep(5)
print(driver.page_source)

【讨论】:

  • 谢谢!但是我只能找到底部部分内容的pagesource,网页中间部分的内容没有,是不是需要一点点向下滚动?
  • 谢谢,我认为它解决了我的问题。但是我还有2个问题,1、由于需要一点一点的往下滚动,看起来有点慢,我需要搭建一个爬虫,有没有可能让它更快? 2. 为什么我需要逐渐向下滚动才能获得内容,它与哪个网络技术相关,我是这个领域的菜鸟,所以稍微解释一下或指点我要找的地方会有很大帮助。再次感谢!
  • @YoarkYANG 1. 你只需要增加滚动长度(例如SCROLL_LENGTH = 600)。 2. webapp查看当前滚动位置,如果到达评论组件,会显示cmets。这将提高网络的性能。顺便说一句,你能不能点击接受这个答案,这样我们就可以关闭这个问题了。
  • 非常感谢!有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
相关资源
最近更新 更多