我正在尝试使用python requests-html模块从“ https://fortune.com/global500/2019/search/”中获取数据。我能够从第1页获得第1个100项,因为该页面启用了javascript。而且我们需要单击“下一步”以加载第二页,现在我只能得到第一百个项目。
当我在浏览器上单击“下一步”时,地址栏上的URL不变。因此,我不知道如何使用request-html获取下一页。
from requests_html import HTMLSession
def get_fortune500():
companies = []
url = 'https://fortune.com/global500/2019/search/'
session = HTMLSession()
r = session.get(url)
r.html.render(wait=1, retries=2)
table = r.html.find('div.rt-tbody', first=True)
rows = table.find('div.rt-tr-group')
for row in rows:
row_data = []
cells = row.find('div.rt-td')
for cell in cells:
celldata = cell.text.lstrip('$').replace(',', '')
row_data.append(celldata)
companies.append(row_data)
return companies
fortune_list = get_fortune500()
print(fortune_list)
print(len(fortune_list))
非常感谢您的光临。
答案 0 :(得分:3)
以下是所有列表中的500个
https://content.fortune.com/wp-json/irving/v1/data/franchise-search-results?list_id=2666483
该网站将此API的响应存储在浏览器IndexedDB中,然后只有前端进行控制。
您可以找出从第一个请求中读取该响应的方式。
答案 1 :(得分:0)
页面使用ajax,强烈建议您使用硒。 这是单击下一步按钮的示例(只需单击一次)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
chromeoption = Options()
# chromeoption.add_argument('--headless')
browser = webdriver.Chrome(options=chromeoption)
browser.get("https://fortune.com/global500/2019/search/")
wait = WebDriverWait(browser,3,0.5)
wait.until(lambda diver:browser.find_element_by_xpath("""//*[@id="content"]/div[2]/div/div[2]/div/div[2]/div/div[3]/button"""))
next=browser.find_element_by_xpath("""//*[@id="content"]/div[2]/div/div[2]/div/div[2]/div/div[3]/button""")
next.click()