Python BeautifulSoup在写入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,

我正在以下网站上练习我的网页抓取技能:“

到目前为止,我的代码如下。我能够获取我想要的字段并将信息写入CSV,但每行中的信息与实际的公司详细信息不匹配。例如,公司A在同一行中有公司D的联系人姓名和公司E的电话号码

由于某些公司不存在某些数据,在将每个公司应分隔的行写入CSV时,我如何解释这一点?在写CSV时,确保我为正确的公司获取正确信息的最佳方法是什么

"""
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中写入时跳过该列。谢谢,这解决了我遇到的解包问题!