javascript - 使用 Python、BeautifulSoup 进行动态数据 Web 抓取

标签 javascript python html web-scraping beautifulsoup

我正在尝试从 HTML 中提取许多页面的数据(数字)。每个页面的数据都不同。当我尝试使用 soup.select('span[class="pull-right"]') 它应该给我号码,但只有标 checkout 现。我相信这是因为网页中使用了 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>]

示例网址:https://tools.wmflabs.org/pageviews/?project=en.wikipedia.org&platform=all-access&agent=user&range=latest-20&pages=Star_Wars:_The_Last_Jedi

我想要浏览量

最佳答案

如果您使用 requests.get 检索页面,则不会执行 javascript 代码。因此应改用 Selenium 。它会在浏览器中打开页面时模仿用户喜欢的行为,因此将执行 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()

注意:如果您需要运行 headless 浏览器,请考虑使用 PyVirtualDisplay (Xvfb 的包装器)以运行 headless WebDriver 测试,请参阅“How do I run Selenium in Xvfb?” ' 了解更多信息。

关于javascript - 使用 Python、BeautifulSoup 进行动态数据 Web 抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51984646/

相关文章:

Python 3 - 如何连续删除句子中的字母?

javascript - 清除 :both does not work in IE?

java - 网页表单提交数量有限

jquery - python:html 编写器?

HTML 不透明度如何设置 child ...HTML

javascript - 为 Materialise Clockpicker 设置时间格式 'HH:MM:SS '

javascript - ExtJS 6 自定义用户界面

javascript - 在可变数量的集合中寻找没有重复字符的最长公共(public)子序列?

javascript - 更新从 Javascript 调用的 PHP 中的数据库表 "user"

python - 如何测试 nginx 代理超时