我正在尝试使用requests
和BeautifulSoup
/ Lxml
https://www.reuters.com/search/news?blob=soybean&sortBy=date&dateRange=all
这是具有load more results
按钮的页面类型。
我找到了几个解释如何操作的页面,但不在requests
的框架内。
我知道我应该花几个小时来研究这个问题,然后再向这里询问,以便证明我已经尝试过。
我已经尝试查看检查窗格,进入网络选项卡等。但是我仍然有点太新鲜了,要求了解如何与javascript交互。
我不需要一个完整的脚本/解决方案作为答案,只是关于如何使用requests
完成这个非常典型的任务的一些指示,以节省我几个宝贵的研究时间。
提前致谢。
答案 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 != '']