Python BeautifulSoup在写入csv时对网站上丢失的数据进行说明
我正在以下网站上练习我的网页抓取技能:“ 到目前为止,我的代码如下。我能够获取我想要的字段并将信息写入CSV,但每行中的信息与实际的公司详细信息不匹配。例如,公司A在同一行中有公司D的联系人姓名和公司E的电话号码 由于某些公司不存在某些数据,在将每个公司应分隔的行写入CSV时,我如何解释这一点?在写CSV时,确保我为正确的公司获取正确信息的最佳方法是什么Python BeautifulSoup在写入csv时对网站上丢失的数据进行说明,python,csv,beautifulsoup,Python,Csv,Beautifulsoup,我正在以下网站上练习我的网页抓取技能:“ 到目前为止,我的代码如下。我能够获取我想要的字段并将信息写入CSV,但每行中的信息与实际的公司详细信息不匹配。例如,公司A在同一行中有公司D的联系人姓名和公司E的电话号码 由于某些公司不存在某些数据,在将每个公司应分隔的行写入CSV时,我如何解释这一点?在写CSV时,确保我为正确的公司获取正确信息的最佳方法是什么 """ Grabs brewery name, contact person, phone number, website address,
"""
Grabs brewery name, contact person, phone number, website address, and email address
for each brewery listed.
"""
import requests, csv
from bs4 import BeautifulSoup
url = "http://web.californiacraftbeer.com/Brewery-Member"
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
company_name = soup.find_all(itemprop="name")
contact_name = soup.find_all("div", {"class": "ListingResults_Level3_MAINCONTACT"})
phone_number = soup.find_all("div", {"class": "ListingResults_Level3_PHONE1"})
website = soup.find_all("span", {"class": "ListingResults_Level3_VISITSITE"})
def scraper():
"""Grabs information and writes to CSV"""
print("Running...")
results = []
count = 0
for company, name, number, site in zip(company_name, contact_name, phone_number, website):
print("Grabbing {0} ({1})...".format(company.text, count))
count += 1
newrow = []
try:
newrow.append(company.text)
newrow.append(name.text)
newrow.append(number.text)
newrow.append(site.find('a')['href'])
except Exception as e:
error_msg = "Error on {0}-{1}".format(number.text,e)
newrow.append(error_msg)
results.append(newrow)
print("Done")
outFile = open("brewery.csv","w")
out = csv.writer(outFile, delimiter=',',quoting=csv.QUOTE_ALL, lineterminator='\n')
out.writerows(results)
outFile.close()
def main():
"""Runs web scraper"""
scraper()
if __name__ == '__main__':
main()
非常感谢您的帮助 您需要使用
zip
来同时迭代所有这些数组:
for company, name, number, site in zip(company_name, contact_name, phone_number, website):
谢谢你的帮助
我意识到,由于每个公司的公司详细信息都包含在Div类“ListingResults\u All\u CONTAINER ListingResults\u Level3\u CONTAINER”中,我可以编写一个嵌套的for循环,循环遍历每个Div,然后获取Div中所需的信息。如果某些公司不存在某些数据,则将该数据存储为空字符串(“”),以便在csv中写入时跳过该列。谢谢,这解决了我遇到的解包问题!