【发布时间】:2020-10-03 05:32:01
【问题描述】:
我正在使用 Beautifulsoup 在多页网站上抓取汽车名称和价格列表。在一页中,它包含 40 个数据,如果只抓取一页,代码就可以正常工作。刮多页时(本例只刮两页检查代码是否正常),发现下一页开头(“价格”列)总是缺少数据,这使得数据是从数据 41 开始没有正确对齐。
关于价格列数据的一些注释:列出的价格可以是 ('ads_price_highlight') 或 ('ads_price'),作为折扣价。
下面是我为这种情况创建的解析多页的代码。我仍然不知道为什么我在价格列上得到了这个缺失的数据,而另一列是正确的。
from bs4 import BeautifulSoup
import pandas as pd
import requests
import numpy as np
from time import sleep
from random import randint
headers = {"Accept-Language": "en-US, en;q=0.5"}
car = []
price = []
pages = np.arange(1,3,1)
for page in pages:
url = 'https://www.mudah.my/malaysia/cars-for-sale/perodua?o='+ str(page) +'&q=&so=1&th=1'
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
car_list = soup.find_all('li', class_='listing_ads_params')
sleep(randint(2,10))
for container in car_list:
cars = container.find('div', {'class':'top_params_col1'})
if cars is not None:
car.append(cars.find('h2', {'class': 'list_title'}).text)
prices2 = container.find('div', class_='ads_price_highlight')
if prices2 is not None:
price.append(prices2.text)
prices = container.find('div', class_='ads_price')
if prices is not None:
price.append(prices.text)
df = pd.DataFrame(data = list(zip(car, price)),
columns = ['car', 'price'])
df.to_csv(r'carprice.csv', index = False)
【问题讨论】:
标签: python web-scraping beautifulsoup html-parsing