【发布时间】:2020-04-06 02:05:23
【问题描述】:
我正在尝试将从网站抓取的信息添加到列中。我有一个看起来像这样的数据集:
COL1 COL2 COL3
... ... bbc.co.uk
我想要一个包含新列的数据集:
COL1 COL2 COL3 Website Address Last Analysis Blacklist Status \
... ... bbc.co.uk
IP Address Server Location City Region
这些新列来自此网站:https://www.urlvoid.com/scan/bbc.co.uk。 我需要用其相关信息填充每一列。
例如:
COL1 COL2 COL3 Website Address Last Analysis Blacklist Status \
... ... bbc.co.uk Bbc.co.uk 9 days ago 0/35
Domain Registration IP Address Server Location City Region
1996-08-01 | 24 years ago 151.101.64.81 (US) United States Unknown Unknown
不幸的是,我在创建新列并用从网站上抓取的信息填充它们时遇到了一些问题。我可能有更多的网站要查看,不仅仅是 bbc.co.uk。 请参阅下面使用的代码。我确信有更好的(并且更少混淆)的方法来做到这一点。 如果您能帮我弄清楚,我将不胜感激。谢谢
编辑:
如上例所示,对于包含三列 (col1, col2 and col3) 的现有数据集,我还应该添加来自抓取的字段 (Website Address,Last Analysis,Blacklist Status, ...)。那么,对于每个 url,我应该有与之相关的信息(例如,示例中的 bbc.co.uk)。
COL1 COL2 COL3 Website Address Last Analysis Blacklist Status \
... ... bbc.co.uk Bbc.co.uk 9 days ago 0/35
... ... stackoverflow.com
... ... ...
IP Address Server Location City Region
COL1 COL2 COL3 Website Address Last Analysis Blacklist Status \
... ... bbc.co.uk Bbc.co.uk 9 days ago 0/35
... ... stackoverflow.com Stackoverflow.com 7 days ago 0/35
Domain Registration IP Address Server Location ...
996-08-01 | 24 years ago 151.101.64.81 (US) United States ...
2003-12-26 | 17 years ago ...
(格式不好,但我认为它足以让您了解预期的输出)。
更新代码:
urls= ['bbc.co.uk', 'stackoverflow.com', ...]
for x in urls:
print(x)
r = requests.get('https://www.urlvoid.com/scan/'+x)
soup = BeautifulSoup(r.content, 'lxml')
tab = soup.select("table.table.table-custom.table-striped")
dat = tab[0].select('tr')
for d in dat:
row = d.select('td')
original_dataset[row[0].text]=row[1].text
不幸的是,我做错了一些事情,因为它仅将网站上检查的第一个 url 中的信息(即 bbc.co.uk)复制到新列下的所有行中。
【问题讨论】:
-
我会有一个空的数据框并添加我得到的数据。
标签: python pandas dataframe web-scraping beautifulsoup