【问题标题】:How to scrape elements within ::beofre selector using bs4 and requests?如何使用 bs4 和请求在 ::beofre 选择器中抓取元素?
【发布时间】:2021-08-11 06:48:10
【问题描述】:

当我使用 bs4 抓取前面的 div 标签时,带有 ::before 和 ::after 标签的内容不可见。 我怎样才能刮掉它们? 我需要网站浏览量的价值。 i need to scrape data from this website

解析器-'lxml'

import requests
from bs4 import BeautifulSoup
import csv
import lxml
import re

website_base="https://pageviews.toolforge.org  /?project=de.wikipedia.org&platform=all-access&agent=user&redirects=0& range=all-time&pages="
name="Michael_ten_Hompel"
main_url=website_base+name

page=requests.get(main_url).text
soup=BeautifulSoup(page,'lxml')



req=soup.find('div',{'class':"chart-legend col-lg-12 clearfix"})

print(req)

【问题讨论】:

  • 它的动态内容,所以用 selenium 试试吧!
  • @BhavyaParikh 不需要硒。

标签: python web-scraping beautifulsoup python-requests lxml


【解决方案1】:

您可以使用端点获取所有数据,将其转储到数据框,然后绘制它。

方法如下:

import matplotlib.pyplot as plt
import pandas as pd
import requests

endpoint = "https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/" \
           "de.wikipedia/all-access/user/Michael_ten_Hompel/daily/2015070100/2021052100"
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.86 "
                  "YaBrowser/21.3.0.740 Yowser/2.5 Safari/537.36"
}
response = requests.get(endpoint, headers=headers).json()
df = pd.DataFrame(
    [[item["timestamp"], item["views"]] for item in response["items"]],
    columns=["Timestamp", "Value"],
)

plt.plot(df["Timestamp"], df["Value"])
plt.show()

这应该会产生一个如下所示的图:

【讨论】:

  • 嘿@baduker 只是为了知识目的你是如何得到那个端点的你能解释或分享一些关于它的帖子!
  • 我使用了浏览器的开发工具。查看 Network -> XHR 选项卡,@BhavyaParikh
  • 好的,我明白了你的意思,但用户想要这个??
  • 用户想要页面中的数据。数据就是情节。您不必像在页面上那样绘制它,但您可以使用数据,即代码中的df
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多