如何从网站中提取图片src



我试图从网站上抓取表格行,以获取冠状病毒传播的数据。

我想提取所有标签的src,以便获得国旗图像的来源以及每个国家的所有数据。有人能帮忙吗?

import pandas as pd
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)
driver = webdriver.Firefox(options=options)
driver.get("https://google.com/covid19-map/?hl=en")
df = pd.read_html(driver.page_source)[1]
df.to_csv("Data.csv", index=False)
driver.quit()

虽然Gareth的回答已经被接受,但他的回答激励我从熊猫的角度写下这篇文章。因为我们知道标志的url是一个固定的模式,唯一改变的就是名称。我们可以通过降低名称的大小写,用下划线替换空格,然后在固定的URL模式中编织名称来创建一个新列

import pandas as pd
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome()
driver.get("https://google.com/covid19-map/?hl=en")
df = pd.read_html(driver.page_source)[1]
df['flag_url'] = df.apply(lambda row: f"https://www.gstatic.com/onebox/sports/logos/flags/{row.Location.lower().replace(' ', '_')}_icon_square.svg", axis=1)
df.to_csv("Data.csv", index=False)
driver.quit()

输出样本

Location,Confirmed,Cases per 1M people,Recovered,Deaths,flag_url
Worldwide,882068,125.18,185067,44136,https://www.gstatic.com/onebox/sports/logos/flags/worldwide_icon_square.svg
United Kingdom,29474,454.19,135,2352,https://www.gstatic.com/onebox/sports/logos/flags/united_kingdom_icon_square.svg
United States,189441,579.18,7082,4074,https://www.gstatic.com/onebox/sports/logos/flags/united_states_icon_square.svg

这不是最聪明的方法,但既然您已经有了页面源代码,那么使用regex来匹配图像的URL怎么样?

import re
print (re.findall(r'https://www.gstatic.com/onebox/sports/logos/flags/.+?.svg', driver.page_source))

图像链接是按顺序排列的,因此它与确诊病例的顺序相匹配——除了在我的电脑上,我现在所在的国家位于列表的首位。

如果这不是你想要的,我可以删除这个答案。

正如@Chris Doyle在评论中提到的那样,这甚至可以简单地通过注意到URL是相同的来实现,用国家名称替换".+?"(全部小写,用下划线连接(。csv文件中有该信息。

country_name = "United Kingdom"
url = "https://www.gstatic.com/onebox/sports/logos/flags/"
url += '_'.join(country_name.lower().split())
url += '.svg'
print (url)

也一定要使用纯熊猫来查看他的答案:(

最新更新