Web scraping 如何抓取网页';使用循环替换CSS行内容,并分离出内容

Web scraping 如何抓取网页';使用循环替换CSS行内容,并分离出内容,web-scraping,beautifulsoup,Web Scraping,Beautifulsoup,我正试图刮下面的网页,我遇到了一些我无法解决的问题。作为一个在刮鱼,我没有深入到美丽的汤或html,css。我只是浏览了一些教程,但它们所展示的示例不够深入,无法涵盖实际问题 因此,以下是页面: 我试图做的是提取网页css行的x1、x2、y1、y2坐标值,并将它们保存在数据集中相应的列x1、x2、y1、y2中 这些元素对应于网页上的箭头。 我已尝试使用find id提取整个容器: import requests from bs4 import BeautifulSoup import re

我正试图刮下面的网页,我遇到了一些我无法解决的问题。作为一个在刮鱼,我没有深入到美丽的汤或html,css。我只是浏览了一些教程,但它们所展示的示例不够深入,无法涵盖实际问题

因此,以下是页面:

我试图做的是提取网页css行的x1、x2、y1、y2坐标值,并将它们保存在数据集中相应的列x1、x2、y1、y2中

这些元素对应于网页上的箭头。

我已尝试使用find id提取整个容器:

import requests
from bs4 import BeautifulSoup
import re

page = requests.get("https://www.fourfourtwo.com/statszone/22-2016/matches/861695/team-stats/6339/0_SHOT_01#tabs-wrapper-anchor")

soup = BeautifulSoup(page.content, "html.parser")

match_view = soup.find(id="match-view-container")
pitch_obj = match_view.find_all('line', class_="pitch-object")
# to print out the first pitch_object
print(pitch_obj[0])
print(type(pitch_obj[0]))
print(pitch_obj[1])
info = [print(pitch_obj[i]) for i in pitch_obj]
print(info)
问题是,css中这些不同的行具有不同的类名,例如pitch object timer-1-24和pitch object timer-1-26。我只知道从上面的代码中得到以下结果,但不知道如何提取x1、x2、y1和y2

<line class="pitch-object timer-1-24" marker-end="url(#bigyellow)" marker-start="url(#bigyellowend)" style="stroke:yellow;stroke-width:3" x1="393.52" x2="373.76" y1="234.79" y2="157.941"></line>
<class 'bs4.element.Tag'>
<line class="pitch-object timer-1-26" marker-end="url(#bigblue)" marker-start="url(#bigblueend)" style="stroke:blue;stroke-width:3" x1="283.28" x2="338.4" y1="193.97" y2="164.14"></line>
是否有更好的方法从该网页中的所有css行元素中提取x1、x2、y1和y2,并将它们放入数据集中的单独列中?非常感谢

您可以使用
zip()
和BeautifulSoup的CSS选择器来组合您正在查找的标记(例如
svg.select(“[x1]”)
将查找具有
x1
属性的所有标记):

这将打印SVG中找到的每一行的坐标:

line=1: x1=393.52 y1=234.79 x2=373.76 y2=157.941
line=2: x1=283.28 y1=193.97 x2=338.4 y2=164.14
line=3: x1=250 y1=476.57 x2=267.68 y2=435.75
line=4: x1=176.16 y1=283.46 x2=190.72 y2=270.9
line=5: x1=358.16 y1=277.18 x2=417.44 y2=133.469
line=6: x1=238.56 y1=299.16 x2=312.4 y2=258.34
line=7: x1=252.08 y1=291.31 x2=340.48 y2=192.4
您可以使用
zip()
和BeautifulSoup的CSS选择器来组合您正在查找的标记(例如
svg.select(“[x1]”)
将查找具有
x1
属性的所有标记):

这将打印SVG中找到的每一行的坐标:

line=1: x1=393.52 y1=234.79 x2=373.76 y2=157.941
line=2: x1=283.28 y1=193.97 x2=338.4 y2=164.14
line=3: x1=250 y1=476.57 x2=267.68 y2=435.75
line=4: x1=176.16 y1=283.46 x2=190.72 y2=270.9
line=5: x1=358.16 y1=277.18 x2=417.44 y2=133.469
line=6: x1=238.56 y1=299.16 x2=312.4 y2=258.34
line=7: x1=252.08 y1=291.31 x2=340.48 y2=192.4

天哪,你真是个天才!你刚刚救了我一整天……我会继续研究你的密码@你最好不要看我的代码;)看看CSS选择器(),它们非常方便。虽然很漂亮,但我们并不支持所有这些,我要问一个问题……我不理解“svg”的音高……这里的“svg”是什么意思?另外,在使用svg.select时,为什么要写“[x1]”而不是x1。我去查看页面内容,它是用x1写的,因为我根本没有学习CSS。。不知怎的,我在这里迷路了……你能给我一根绳子吗?@commentallez vous
svg#pitch
将选择所有
svg
标记,其中
id=“pitch”
,在你的情况下,整个文档中只有一个标记。方括号中的
[x1]
,x1表示要选择具有x1属性的所有标记,例如。如果你只想选择带有
x1
属性的
标记,你会写
select('div[x1]”)
我刚刚看了一个教程,上面说当选择id时,你需要在id前面加一个#,所以选择一个(svg#pitch)意味着选择带有id pitch的svg……天哪,你真是个天才!你刚刚救了我一整天……我会继续研究你的密码@你最好不要看我的代码;)看看CSS选择器(),它们非常方便。虽然很漂亮,但我们并不支持所有这些,我要问一个问题……我不理解“svg”的音高……这里的“svg”是什么意思?另外,在使用svg.select时,为什么要写“[x1]”而不是x1。我去查看页面内容,它是用x1写的,因为我根本没有学习CSS。。不知怎的,我在这里迷路了……你能给我一根绳子吗?@commentallez vous
svg#pitch
将选择所有
svg
标记,其中
id=“pitch”
,在你的情况下,整个文档中只有一个标记。方括号中的
[x1]
,x1表示要选择具有x1属性的所有标记,例如。如果您只想选择带有
x1
属性的
标记,您将编写
select('div[x1]”)
我刚刚看了一个教程,它说在选择id时,需要在id前面添加一个#,所以选择一个(svg#pitch)意味着选择带有id pitch的svg。。。。
line=1: x1=393.52 y1=234.79 x2=373.76 y2=157.941
line=2: x1=283.28 y1=193.97 x2=338.4 y2=164.14
line=3: x1=250 y1=476.57 x2=267.68 y2=435.75
line=4: x1=176.16 y1=283.46 x2=190.72 y2=270.9
line=5: x1=358.16 y1=277.18 x2=417.44 y2=133.469
line=6: x1=238.56 y1=299.16 x2=312.4 y2=258.34
line=7: x1=252.08 y1=291.31 x2=340.48 y2=192.4