BeautifulSoup在应该拉更多线的时候只拉了一条线



下面的代码工作,但它只拉一行数据(标题,链接,名称)当它应该拉100多行'标题,链接,名称'。我猜defparse部分有问题,但我似乎找不出来。

我很感激任何我能得到的帮助。

import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.blahblah.com'
def get_data(url):
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser') 
return soup

def parse(soup):
productslist = []
results = soup.find_all('div', {'class': 'item'})
results1 = soup.find_all('div', {'class': 'from'})
for item in results:
title = item.find('span').text
link = item.find('a')['href']
for item1 in results1:
name = item1.find('span').text          
product = {
'Title': title,
'Link': link,
'Name': name        
}
productslist.append(product)        
return productslist
def output(productslist):
productsdf = pd.DataFrame(productslist)
productsdf.to_csv('output.csv', index=False)
return

soup = get_data(url)    
productslist = parse(soup)  
output(productslist)
for item in results:
title = item.find('span').text
link = item.find('a')['href']
for item1 in results1:
name = item1.find('span').text          
product = {
'Title': title,
'Link': link,
'Name': name        
}

我认为问题是你在for循环之外分配Product,所以分配只发生一次。其次,results1、results、item和item1不是非常有用或有用的变量名。试试像product_names和product_metadata这样的名字,然后对于product_metadata中的元数据如果想要分别存储title、Links和Names,则需要在循环作用域之外声明变量,如

names, title, link = []
for item in results:
title = item.find('span').text
link = item.find('a')['href']
for item1 in results1:
name = item1.find('span').text          
product = {
'Title': title,
'Link': link,
'Name': name        
}

一个问题你怎么知道{name}和{link, title}对应网站上的同一产品?

最新更新