【发布时间】:2017-02-15 07:53:30
【问题描述】:
我正在以下网站练习我的网页抓取技巧:“http://web.californiacraftbeer.com/Brewery-Member”
我到目前为止的代码如下。我能够获取我想要的字段并将信息写入 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 时跳过该列。
标签: python csv beautifulsoup