【发布时间】:2019-08-21 10:01:55
【问题描述】:
我正在从事一个网络抓取项目,在该项目中,我必须在网站中搜索产品并将产品的所有详细信息附加到相应的列表中。
例如,URL 的第一页列出了 10 个名称为“CLOSE UP”的产品。我必须将产品的标题附加到列表中,将产品的条形码附加到另一个列表等等..
我也必须为多个页面执行此操作。
这是我目前的代码
def find_items(base_url, item_to_find, num_of_pages):
title_list = []
barcode_list = []
category_list = []
manufacturer_list = []
url = base_url + item_to_find + '/'
for num in range(1, num_of_pages+1):
url = url + str(num)
print(url)
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
a_tags = soup.find_all('a', {"class": 'product-search-item'})
for tag in a_tags:
p_tags = tag.find_all('p')
try:
title_list.append(p_tags[0].contents[0])
barcode_list.append(p_tags[1].contents[0])
category_list.append(p_tags[2].contents[0])
manufacturer_list.append(p_tags[3].contents[0])
except Exception as e:
title_list.append('NaN')
barcode_list.append('NaN')
category_list.append('NaN')
manufacturer_list.append('NaN')
url = base_url + item_to_find + '/'
return (title_list, barcode_list, category_list, manufacturer_list)
在上面的代码中,我使用 try except 条件将信息附加到列表中,因为并非所有产品都具有所有信息。如果信息可用,则追加到列表中,否则追加“NaN”。这就是代码应该做的。这可确保列表的长度始终保持不变。
但是当我运行下面的代码时,列表的长度是不一样的。
title_list, barcode_list, category_list, manufacturer_list = find_items("https://www.barcodelookup.com/", 'close-up', 20)
我不知道我做错了什么。
【问题讨论】:
标签: python web-scraping beautifulsoup python-requests