使用“加载更多结果”按钮抓取页面

时间:2018-01-27 16:08:59

标签: python python-requests

我正在尝试使用requestsBeautifulSoup / Lxml

抓取以下页面

https://www.reuters.com/search/news?blob=soybean&sortBy=date&dateRange=all

这是具有load more results按钮的页面类型。 我找到了几个解释如何操作的页面,但不在requests的框架内。

我知道我应该花几个小时来研究这个问题,然后再向这里询问,以便证明我已经尝试过。

我已经尝试查看检查窗格,进入网络选项卡等。但是我仍然有点太新鲜了,要求了解如何与javascript交互。

我不需要一个完整的脚本/解决方案作为答案,只是关于如何使用requests完成这个非常典型的任务的一些指示,以节省我几个宝贵的研究时间。

提前致谢。

1 个答案:

答案 0 :(得分:3)

这里的快速脚本应该说明如何使用Selenium来完成:

from selenium import webdriver
import time

url = "https://www.reuters.com/search/news?blob=soybean&sortBy=date&dateRange=all"
driver = webdriver.PhantomJS()
driver.get(url)
html = driver.page_source.encode('utf-8')
page_num = 0

while driver.find_elements_by_css_selector('.search-result-more-txt'):
    driver.find_element_by_css_selector('.search-result-more-txt').click()
    page_num += 1
    print("getting page number "+str(page_num))
    time.sleep(1)

html = driver.page_source.encode('utf-8')

我不知道如何使用requests执行此操作。路透社似乎有很多关于大豆的文章。我已经完成了250多个页面加载"当我写完这个答案时。

一旦你刮掉所有或大量的页面,你就可以通过将html传递给Beautiful Soup来抓取数据:

soup = BeautifulSoup(html, 'lxml')
links = soup.find_all('div', attrs={"class":'search-result-indiv'})
articles = [a.find('a')['href'] for a in links if a != '']