簡體   English   中英

如何將網站上的所有抓取數據保存在 pandas dataframe 中?

[英]How to save all the scraped data from a website in a pandas dataframe?

我編寫了一個代碼,它使用BeautifulSoup和一個預先設計的庫CommonRegex來從網頁上抓取聯系信息,它基本上是用於抓取美國地址信息的正則表達式。雖然我能夠提取形式為列出並將其轉換為 pandas dataframe,我無法保存列表中存在的所有值。 這是我寫的代碼:

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 個值,即,

在此處輸入圖像描述

結果應該是這樣的:- 在此處輸入圖像描述

我不知道如何解決這個問題,如果你們能幫助我,那就太好了。

這應該這樣做:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM