Sib*_*ter 2 string class beautifulsoup python-3.x
我检查了类似的问题,但找不到解决方案......
我正在尝试从以下页面中获取额外旅行时间的分钟数 (46):https://www.tomtom.com/en_gb/trafficindex/city/istanbul
我尝试了两种方法(Xpath 和 find 类),但都给出了空返回。
import requests
from bs4 import BeautifulSoup
from lxml.html import fromstring
page = requests.get("https://www.tomtom.com/en_gb/trafficindex/city/istanbul")
tree = fromstring(page.content)
soup = BeautifulSoup(page.content, 'html.parser')
#print([type(item) for item in list(soup.children)])
html = list(soup.children)[2]
g_data = soup.find_all("div", {"class_": "big.ng-binding"})
congestion = tree.xpath("/html/body/div/div[2]/div[2]/div[2]/section[2]/div/div[2]/div/div[2]/div/div[2]/div[1]/div[1]/text()")
print(congestion)
print(len(g_data))
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?
非常感谢您的帮助!
不幸的是BeautifulSoup,仅靠这一点还不足以实现这一目标。该网站使用 JavaScript 生成内容,因此您必须使用其他工具,例如Selenium.
import bs4 as bs
import re
from selenium import webdriver
url = 'https://www.tomtom.com/en_gb/trafficindex/city/istanbul'
driver = webdriver.Firefox()
driver.get(url)
html = driver.page_source
soup = bs.BeautifulSoup(html)
Run Code Online (Sandbox Code Playgroud)
我可以看到两种获取额外时间的方法:
1. 寻找div与class="text-big ng-binding".
div = soup.find_all('div', attrs={'class' : 'text-big ng-binding'})
result = div[0].text
Run Code Online (Sandbox Code Playgroud)
2.先查找div包含Per day文本,然后向上两个div
div = soup.find_all(text=re.compile('Per day'))
result = div.find_previous('div').find_previous('div').text
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3524 次 |
| 最近记录: |