【问题标题】:How to append data in data frame using beautiful soup如何使用漂亮的汤在数据框中附加数据
【发布时间】:2021-12-23 01:23:25
【问题描述】:
import requests
from bs4 import BeautifulSoup
import pandas as pd
baseurl='https://locations.atipt.com/'
headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}
r =requests.get('https://locations.atipt.com/al')
soup=BeautifulSoup(r.content, 'html.parser')
tra = soup.find_all('ul',class_='list-unstyled')
productlinks=[]
for links in tra:
    for link in links.find_all('a',href=True):
        comp=baseurl+link['href']
        productlinks.append(comp)
temp=[]
for link in productlinks:
    r =requests.get(link,headers=headers)
    soup=BeautifulSoup(r.content, 'html.parser')
    tag=soup.find_all('div',class_='listing content-card')
    for pro in tag:
        for tup in pro.find_all('p'):
            temp.append([text for text in tup.stripped_strings])
            

df = pd.DataFrame(temp)
print(df)

这是我得到的输出

9256 Parkway E Ste A
Birmingham, 
Alabama 35206

但我不知道如何在数据框中给出名称我将名称address9256 Parkway ESte ACity BirminghamstateALabama 35206 如果可能的话,请帮助这些问题

【问题讨论】:

  • 如果你的数据temp一直有addresscitystate元素的顺序相同,你可以使用df = pd.DataFrame(temp, columns=['address', 'city', 'state'])
  • 给出论文错误ValueError: 3 columns passed, passed data had 1 columns
  • 这是因为 DataFrame 需要一个列表列表,其中包含每列的元素。在你的情况下是 3。

标签: python dataframe web-scraping beautifulsoup


【解决方案1】:
temp=[]
for link in productlinks:
    r =requests.get(link,headers=headers)
    soup=BeautifulSoup(r.content, 'html.parser')
    tag=soup.find_all('div',class_='listing content-card')
    for pro in tag:
        data=[tup.text for tup in pro.find_all('p')]
        address="".join(data[:2])
        splitdata=data[2].split(",")
        city=splitdata[0]
        splitsecond=splitdata[-1].split("\xa0")
        state=splitsecond[0]
        postalcode=splitsecond[-1]
        temp.append([address,city,state])
import pandas as pd
df=pd.DataFrame(temp,columns=["Address","City","State"])
df

输出:

        Address         City      State    Postalcode
0   634 1st Street NSte 100 Alabaster   AL  35007
1   9256 Parkway ESte A Birmingham  AL  35206
....

如果您想添加通话详细信息,只需在 postalcode 之后添加此语句

callNumber=pro.find("span",class_="directory-phone").get_text(strip=True).split("\n")[-1].lstrip()

并将其附加到temp 列表

【讨论】:

  • 兄弟感谢代码正在运行我们可以将35007保存在postal code
猜你喜欢
  • 2021-01-12
  • 2018-05-22
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
相关资源
最近更新 更多