gpt4 book ai didi

python - 如何抓取使用 JavaScript 呈现数据的网站

转载 作者:行者123 更新时间:2023-12-01 01:16:26 25 4
gpt4 key购买 nike

我正在抓取这个网站https://robertsspaceindustries.com/pledge/ship-upgrades?to-ship=173我想在“选择你的船”文本的右侧获取“箭头”文本

我尝试使用 requests 和 BeautifulSoup 来选择包含文本的标签,当我检查页面时,我可以看到文本在哪里,它位于标签之间,我尝试使用 soup.select(".name") i 选择它仍然得到空字符串,可能是数据是用 Javascript 渲染的,所以我尝试了 selenium 并尝试等待元素加载后再选择它,这里仍然没有我的代码

try:
element = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CLASS_NAME, "name"))
)

select_tags = driver.find_elements_by_css_selector(".name")
for tag in select_tags:
print(tag.text)
finally:
driver.quit()

箭头

最佳答案

对于这样不需要与页面交互的任务,Selenium 可能有点过分了。这只是几行 requests_html :

from requests_html import HTMLSession

url = 'https://robertsspaceindustries.com/pledge/ship-upgrades?to-ship=173'

session = HTMLSession()
r = session.get(url)
r.html.render()
print(r.html.find('.info > .name', first=True).text)

按预期生成 Arrow

对于此特定网站,您还可以检查内容中的其他位置以获取所需的信息,而无需 JavaScript 支持,例如:

import json

import requests

url = 'https://robertsspaceindustries.com/pledge/ship-upgrades?to-ship=173'

r = requests.get(url)
text = r.text

json_start_text = 'fromShips: '
json_start = text.index(json_start_text) + len(json_start_text)
json_end = text.index(']', json_start)
json_text = text[json_start:json_end + 1]
data = json.loads(json_text)
for ship in data:
name = ship['name']
msrp = ship['msrp']
print(f'{name} {msrp}')

结果

Aurora ES $20.00
P52 Merlin $20.00
Aurora MR $25.00
P72 Archimedes $30.00
Mustang Alpha $30.00
Aurora LX $30.00
...
Arrow $75.00
...

关于python - 如何抓取使用 JavaScript 呈现数据的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54297923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com