我正在尝试从二手车网站上抓取特定车型及其对应颜色的数据。
到目前为止,一切正常,但是输出csv很小。许多结果只是缺失。调整刮削速度似乎没有什么不同。列出的汽车数量仍然远远小于网站上显示的数量。
这是到目前为止的代码:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv
from datetime import datetime
from geopy.geocoders import Nominatim
from geopy.exc import GeocoderTimedOut
geolocator = Nominatim(user_agent="Alfa_Atlas")
######################################################
# Red Cars
######################################################
def red_cars():
page_1 = 'https://www.autoscout24.de/lst/alfa-romeo/giulia?sort=age&desc=1&bcol=10&ustate=N%2CU&size=20&page='
page_2 = '&cy=D&fregfrom=2014&atype=C&'
page_list = []
for i in range(1,5):
a = (page_1 + str(i) + page_2)
page_list.append(a)
data = []
car_color = 'red'
for count in page_list:
page = urlopen(count)
soup = BeautifulSoup(page, 'html.parser')
name_box = soup.find('h2', attrs={'class': 'cldt-summary-makemodel sc-font-bold sc-ellipsis'})
name = name_box.text.strip()
version = soup.find('h2', attrs={'class': 'cldt-summary-version sc-ellipsis'})
version_clean = version.text.strip()
price_box = soup.find('span', attrs={'class': 'cldt-price sc-font-xl sc-font-bold'})
price = price_box.text.strip()
place = soup.find('span', attrs={'class': 'cldf-summary-seller-contact-zip-city'})
place_clean_lat = geolocator.geocode(place.text.strip(), timeout=10).latitude
place = soup.find('span', attrs={'class': 'cldf-summary-seller-contact-zip-city'})
place_clean_lon = geolocator.geocode(place.text.strip(), timeout=10).longitude
data.append((name, version_clean, price, place_clean_lat, place_clean_lon))
with open('Alfa_Used_Stock.csv', 'a') as csv_file:
writer = csv.writer(csv_file)
for name, version_clean, price, place_clean_lat, place_clean_lon in data:
writer.writerow([name, version_clean, price, place_clean_lat, place_clean_lon, car_color, datetime.now()])
red_cars()
代码代表一种颜色。我为所有其他颜色做了同样的事情。
由于它不会引发任何错误,因此我对于在哪里攻击该问题一无所知。它应该至少获取133个结果,但目前我的排名是10。也许这与请求的网址有关?
很高兴有人知道!