使用Python和bs4从图像中刮取标题”>

问题描述 投票:1回答:2

我不熟悉Python抓取功能,需要一些帮助。在BI咨询公司实习期间,我正在做自己的第一个项目,并且正在构建要在Qlik Sense中使用的数据模型。

我设法从Transfermarkt刮取了名称和值,但现在我想刮取俱乐部和国家/地区的标题(均带有图片)。图像抓取是另一回事(据我所知,需要一套完全不同的代码)。但是我想要标题,例如“法国”。有人可以指出我正确的方向吗?

代码已通过Pablos的响应进行了更新。现在我得到了错误:

追踪(最近通话):文件“ c:/ Users / cljkn / Desktop / Python scraper github / .vscode / Scraping Transfermarkt.py”,第33行,在df = pd.DataFrame({“ Players”:PlayersList,“ Values”:ValuesList,“ Nationality”:NationalityList})文件“ C:\ Users \ cljkn \ Desktop \ Python scraper github.venv \ lib \ site-packages \ pandas \ core \ frame.py”,第435行,位于init

中mgr = init_dict(数据,索引,列,dtype = dtype)文件“ C:\ Users \ cljkn \ Desktop \ Python scraper github.venv \ lib \ site-packages \ pandas \ core \ internals \ construction.py”,第254行,位于init_dict返回arrays_to_mgr(数组,数据名称,索引,列,dtype = dtype)文件“ C:\ Users \ cljkn \ Desktop \ Python scraper github.venv \ lib \ site-packages \ pandas \ core \ internals \ construction.py”,第64行,在arrays_to_mgr中索引= extract_index(数组)365行,位于extract_index中的文件“ C:\ Users \ cljkn \ Desktop \ Python scraper github.venv \ lib \ site-packages \ pandas \ core \ internals \ construction.py”引发ValueError(“数组必须都具有相同的长度”)ValueError:数组的长度必须相同
import requests
from bs4 import BeautifulSoup

import pandas as pd

headers = {'User-Agent':
            'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

page = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop"
pageTree = requests.get(page, headers=headers)
pageSoup = BeautifulSoup(pageTree.content, 'html.parser')

Players = pageSoup.find_all("a", {"class": "spielprofil_tooltip"})

Values = pageSoup.find_all("td", {"class": "rechts hauptlink"})

Nationality = pageSoup.find_all("td", {"class": "flaggenrahmen"}, {"title"})
for nat in Nationality:
    img = nat.find('img')
    title = img.get('title')

PlayersList = []
ValuesList = []
NationalityList = []

for i in range(0,25):
    PlayersList.append(Players[i].text)
    ValuesList.append(Values[i].text)
    NationalityList.append(Nationality[i].text)

NationalityList.append('title')

df = pd.DataFrame({"Players":PlayersList,"Values":ValuesList,"Nationality":NationalityList})

df.head()

df.to_csv (r'C:\Users\cljkn\Desktop\Python scraper github\export_dataframe.csv', index = False, header=True)

print(df)

在编码或原始资料方面的任何直接帮助,将不胜感激。

我不熟悉Python抓取功能,需要一些帮助。在BI咨询公司实习期间,我正在做自己的第一个项目,并且正在构建要在Qlik Sense中使用的数据模型。我是...

python web-scraping beautifulsoup
2个回答
0
投票

通过find_all,您将获得类“ flaggenrahmen”的“ td”的列表。如果您想要标题,则需要在“ Nationality”对象和.get('title')上循环。


0
投票
for item in soup.findAll("img", class_="flaggenrahmen", title=re.compile("^(?!http).*")):
    print(item.get("title"))
© www.soinside.com 2019 - 2024. All rights reserved.