javascript - 使用 Python,BeautifulSoup 进行动态数据网页抓取
问题描述
我正在尝试从 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>]
我想要浏览量
解决方案
如果您使用 requests.get 检索页面,则不会执行 javascript 代码。所以要用硒代替。它将在浏览器中打开页面时模仿用户喜欢的行为,因此将执行 js 代码。
要从 selenium 开始,您需要安装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 测试,请参阅“如何在 Xvfb 中运行 Selenium?' 了解更多信息。
推荐阅读
- ionic-framework - Ionic:使用相同的代码创建 Web 应用程序和本机应用程序?
- javascript - 如何使用 FlowType 继承类?
- html - 包含引导链接后如何保留原始css文件?
- vba - 如何对 word 文档中的某些表格应用排序?
- python - 无法使用 send_from_directory 提供文件
- postgresql - 循环遍历 plpgsql 中的复合数组
- sql-server - 在 SQL Server 中获得天花板或地板几个月的问题
- tensorflow - tensorflow-gpu 在 LINUX 上运行失败
- php - 如何将多个自定义字段插入到 whmcs API
- prestashop - Prestashop - 如何创建一个打开自定义页面的按钮?