【发布时间】:2022-08-20 19:13:42
【问题描述】:
我发现了一个对我来说很难抓取的网页,我不确定为什么。它的表格数据在第一列带有超链接,地址和网址。我要做的是从第一页刮掉名称和位置,然后进入链接,刮掉电话号码并将其附加到我的另一个列表中。
理想情况下,CSV 应该有:标题、位置、省份、链接、电话。
我已经尝试了好几天,但我在兜圈子。请帮忙!
我的代码如下
import requests
from bs4 import BeautifulSoup
import pandas as pd
baseurl = [\"https://www.informa.es/directorio-empresas/0111_CULTIVO-CEREALES-EXCEPTO-ARROZ-LEGUMINOSAS-SEMILLAS-OLEAGINOSAS/Comunidad_CASTILLA-MANCHA.html#empresa\"]
urls = [f\'https://www.informa.es/directorio-empresas/0111_CULTIVO-CEREALES-EXCEPTO-ARROZ-LEGUMINOSAS-SEMILLAS-OLEAGINOSAS/Comunidad_CASTILLA-MANCHA/Empresas-{i}.html#empresa\'.format(i) for i in range(2,38)]
allurls = baseurl + urls
#print(allurls)
data = []
for url in allurls:
page = requests.get(url)
soup = BeautifulSoup(page.content, \"html.parser\")
lists = soup.select(\"div#empresas_directorio ul\")
#scrape the pages
for lis in lists:
title = lis.find(\'li\', class_=\"nom_empresa\").text
location = lis.find(\'span\', class_=\"addressLocality\").text
province = lis.find(\'span\', class_=\"addressRegion\").text
link = lis.select_one(\"li.col1 a\")[\'href\']
info = [title, location, province, link]
#print(info)
sub_page = requests.get(link)
soup2 = BeautifulSoup(sub_page.content, \"html.parser\")
phone=soup2.select_one(\'tel\')
telephone = phone.text if phone else None
#print([title,location,province,link,telephone])
data.append([title, location, province, link, telephone])
cols = [\"title\", \"location\", \"province\", \"link\", \"telephone\"]
df = pd.DataFrame(data, columns=cols)
print(df)
df.to_csv(\'CSM.csv\',index = False)
标签: python html dataframe web-scraping beautifulsoup