Я практикую свой веб выскабливание навыки на следующем веб-сайте: «http://web.californiacraftbeer.com/Brewery-Member»Python BeautifulSoup учета отсутствующих данных на веб-сайте при записи в формате CSV
код у меня до сих пор находится ниже. Я могу захватить поля, которые я хочу, и написать информацию в 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()
Любая помощь очень ценится!
Если некоторые данные не существуют для определенных компаний, то сохраняйте эти данные как пустую строку (''), чтобы она пропускала этот столбец при записи в csv. –