如何将网站上所有抓取的数据保存在 pandas 数据框中?
Posted
技术标签:
【中文标题】如何将网站上所有抓取的数据保存在 pandas 数据框中?【英文标题】:How to save all the scraped data from a website in a pandas dataframe? 【发布时间】:2020-08-06 17:50:51 【问题描述】:我编写了一个代码,它使用BeautifulSoup
和一个预先设计的库CommonRegex 从网页中抓取联系信息,这基本上是用于抓取美国地址信息的正则表达式。虽然我能够提取信息它以列表的形式并将其转换为熊猫数据框,我无法保存列表中存在的所有值。这是我写的代码:
import pandas as pd
from commonregex import CommonRegex
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'https://www.thetaxshopinc.com/pages/contact-tax-accountant-brampton'
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')
for link in soup.find_all('p'):
df = CommonRegex()
df1 = df.street_addresses(link.get_text())
df2 = df.phones(link.get_text())
df3 = df.emails(link.get_text())
for i in df1:
dfr = pd.DataFrame([i], columns = ['Address'])
for j in df2:
dfr1 = pd.DataFrame([j], columns = ['Phone_no'])
dfr1['Phone_no'] = dfr1['Phone_no'].str.cat(sep=', ')
dfr1.drop_duplicate(inplace = True)
for k in df3:
dfr2 = pd.DataFrame([k], columns = ['Email'])
dfc = pd.concat([dfr, dfr1, dfr2], axis = 1)
这是我得到的结果:-
但是,由于正则表达式为Phone no
提取了3个值,即,
结果应该是这样的:-
我不知道如何解决这个问题,如果你们能帮助我,那就太好了。
【问题讨论】:
您想要将所有地址、电话号码和电子邮件放在一行中吗? 是的,如果Address
是唯一的,那么所有值都应该在一行中,但是如果假设网站有多个地址,例如特定商店的多个分店,那么,下一个Address
应该在这个下面。
【参考方案1】:
应该这样做:
import pandas as pd
from commonregex import CommonRegex
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'https://www.thetaxshopinc.com/pages/contact-tax-accountant-brampton'
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')
dict_data = 'address':[], 'phone_no': [], 'email': []
crex = CommonRegex()
for link in soup.find_all('p'):
str_add = crex.street_addresses(link.get_text())
phone = crex.phones(link.get_text())
email = crex.emails(link.get_text())
if str_add:
dict_data['address'].append(str_add[0])
if phone:
dict_data['phone_no'].append(', '.join(phone))
if email:
dict_data['email'].append(email[0])
df = pd.DataFrame(dict_data)
【讨论】:
非常受欢迎,但要小心一些网站明确表示恐吓他们是非法的。以上是关于如何将网站上所有抓取的数据保存在 pandas 数据框中?的主要内容,如果未能解决你的问题,请参考以下文章
使用 python 和 Beautifulsoup4 从抓取数据中写入和保存 CSV 文件