我正在尝试从HTML中提取许多页面的数据(数字)。每个页面的数据都不同。当我尝试使用soup.select('span [class =“ pull-right”]')时,它应该给我数字,但是只有标签出现。我相信这是因为网页中使用了Javascript。 180,476是我要在许多页面上使用的特定HTML处的数据位置:
<div class="legend-block--body">
<div class="linear-legend--counts">
Pageviews:
<span class="pull-right">
180,476
</span>
</div>
<div class="linear-legend--counts">
Daily average:
<span class="pull-right">
8,594
</span>
</div></div>
我的代码(这在很多页面中都是循环的):
res = requests.get(wiki_page, timeout =None)
soup = bs4.BeautifulSoup(res.text, 'html.parser')
ab=soup.select('span[class="pull-right"]')
print(ab)
输出:
[<span class="pull-right">\n<label class="logarithmic-scale">\n<input
class="logarithmic-scale-option" type="checkbox"/>\n Logarithmic scale
</label>\n</span>, <span class="pull-right">\n<label class="begin-at-
zero">\n<input class="begin-at-zero-option" type="checkbox"/>\n Begin at
zero </label>\n</span>, <span class="pull-right">\n<label class="show-
labels">\n<input class="show-labels-option" type="checkbox"/>\n Show
values </label>\n</span>]
我想要综合浏览量
答案 0 :(得分:3)
如果您检索带有requests.get的页面,则JavaScript代码将不会执行。因此,应改为使用硒。在浏览器中打开页面时,它将模仿用户喜欢的行为,因此将执行js代码。
要从硒开始,您需要安装pip install selenium
。然后使用以下代码检索您的商品:
from selenium import webdriver
browser = webdriver.Firefox()
# List of the page url and selector of element to retrieve.
wiki_pages = [("https://tools.wmflabs.org/pageviews/?project=en.wikipedia.org&platform=all-access&agent=user&range=latest-20&pages=Star_Wars:_The_Last_Jedi",
".summary-column--container .legend-block--pageviews .linear-legend--counts:first-child span.pull-right"),]
for wiki_page in wiki_pages:
url = wiki_page[0]
selector = wiki_page[1]
browser.get(wiki_page)
page_views_count = browser.find_element_by_css_selector(selector)
print page_views_count.text
browser.quit()
注意:如果您需要运行无头浏览器,请考虑使用PyVirtualDisplay(Xvfb的包装器)运行无头WebDriver测试,请参阅'How do I run Selenium in Xvfb?以获得更多信息。
答案 1 :(得分:1)
您应该尝试使用python插件selenium。 它要求您为正在使用的任何浏览器下载驱动程序。 然后,您将能够使用硒从html中提取值
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("https://tools.wmflabs.org/pageviews/?project=en.wikipedia.org&platform=all-access&agent=user&range=latest-20&pages=Star_Wars:_The_Last_Jedi")
element = driver.find_element_by_class_name("pull-right")
// or the following below
//element = driver.find_element_by_name("q")
//element = driver.find_element_by_id("html ID name")
//element = driver.find_element_by_name("html element name")
//element = driver.find_element_by_xpath("//input[@id='passwd-id']")
print(element)
driver.close()