我想提取快照中给出的特定范围的文本。我无法通过其class属性找到span。我已经附加了要提取的数据的html源(快照)。 有什么建议吗?
import bs4 as bs
import urllib
sourceUrl='https://www.pakwheels.com/forums/t/planing-a-trip-from-karachi-to-lahore-by-road-in-feb-2017/414115/2'
source=urllib.request.urlopen(sourceUrl).read()
soup=bs.BeautifulSoup(source, 'html.parser')
count=soup.find('span',{'class':'number'})
print(len(count))
见图片:
答案 0 :(得分:1)
如果您在浏览器中禁用JavaScript,则可以轻松看到所需的span元素正在消失。 为了获得该元素,可以使用Selenium浏览器之一。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.pakwheels.com/forums/t/planing-a-trip-from-karachi-to-lahore-by-road-in-feb-2017/414115/2')
span = driver.find_element_by_xpath('//li[3]/span')
print(span.text)
driver.close()
另一种解决方案 - 在网页源中深入查找所需值(在Chrome浏览器中按Ctrl + U)并使用正则表达式提取范围值。
import re
import requests
r = requests.get(
'https://www.pakwheels.com/forums/t/planing-a-trip-from-karachi-to-lahore-by-road-in-feb-2017/414115/2')
span = re.search('\"posts_count\":(\d+)', r.text)
print(span.group(1))
答案 1 :(得分:0)
如果您知道如何使用 CSS SELECTORS ,则可以使用:
mySpan = soup.select("span.number")
它将返回对此选择器有效的所有节点的List。
所以mySpan[0]
可能包含您需要的内容。然后使用其中一种方法(例如get_text()
)来获取所需内容。
答案 2 :(得分:0)
首先,您需要解码响应
source=urllib.request.urlopen(sourceUrl).read().decode()
此修复后,您的问题可能会消失