[英]BeautifulSoup can't scrape multiple pages
我正在嘗試使用BeautifulSoup抓取網站的20頁。 每個頁面大約有30個項目,每個項目都有8個功能,我想將它們作為元組檢索並附加到稱為res
的列表中。
現在,下面的代碼應該從20個頁面中檢索所有項目及其功能並將其存儲到res
,但是由於某種原因,它似乎似乎僅檢索第一頁項目和功能。
任何幫助表示贊賞。
for i in range(30):
r = requests.get('https://www.olx.ba/pretraga?trazilica=+golf+2&kategorija=18&stranica='+ str(i))
soup = BeautifulSoup(r.text, 'lxml')
all_items = soup.select('div#rezultatipretrage div.listitem.artikal.obicniArtikal.imaHover-disabled.i.index')
for item in all_items:
naziv = item.find('p', class_='na').text
link = item.a['href']
lokacija = item.find('div', class_='lokacijadiv').text.strip()
godiste = item.find('span', class_='desnopolje').text
gorivo = item.find_all('p', class_='polje')[1].find('span', class_='desnopolje').text
if item.find('div', class_='cijena').span.text == 'PO DOGOVORU':
cijena = 'PO DOGOVORU'
else:
cijena = item.find('div', class_='cijena').span.text[:-2].strip()
cijena = int(cijena.replace('.',''))
stanje = item.find('div', class_='stanje k').text.strip()
datum = item.find('div', class_='kada').text
res.append((naziv, link, lokacija, godiste, gorivo, cijena, stanje, datum))
您只需要選擇帶listitem
類的所有<div>
,即可從頁面中獲取所有項,而不僅限於特色汽車。
我進行了少量更改並檢查了您的代碼,以成功抓取全部30頁(我在某些字段中將"-"
作為默認值,因此請檢查結果是否正確):
from bs4 import BeautifulSoup
import requests
from pprint import pprint
res = []
for i in range(30):
r = requests.get('https://www.olx.ba/pretraga?trazilica=+golf+2&kategorija=18&stranica='+ str(i))
soup = BeautifulSoup(r.text, 'lxml')
all_items = soup.select('div#rezultatipretrage div.listitem')
for item in all_items:
if not item.find('p', class_='na'):
continue
naziv = item.find('p', class_='na').text
link = item.a['href']
lokacija = item.find('div', class_='lokacijadiv').text.strip()
godiste = item.find('span', class_='desnopolje').text if item.find('span', class_='desnopolje') else '-'
try:
gorivo = item.find_all('p', class_='polje')[1].find('span', class_='desnopolje').text
except IndexError:
gorivo = '-'
if item.find('div', class_='cijena').span.text == 'PO DOGOVORU':
cijena = 'PO DOGOVORU'
else:
cijena = item.find('div', class_='cijena').span.contents[-1][:-2].strip()
cijena = int(cijena.replace('.',''))
stanje = item.find('div', class_='stanje k').text.strip() if item.find('div', class_='stanje k') else '-'
datum = item.find('div', class_='kada').text
res.append((naziv, link, lokacija, godiste, gorivo, cijena, stanje, datum))
pprint(res)
這將打印30頁中的所有信息:
[('VW GOLF 5 2.0 TDI, 2005 god. Registrovan',
'https://www.olx.ba/artikal/30396912/vw-golf-5-2-0-tdi-2005-god-registrovan/',
'Živinice',
'2005',
'Dizel',
8400,
'KORIŠTENO',
'Prije 4 dana'),
('VW GOLF 2 DIZEL TEK REGISTROVAN',
'https://www.olx.ba/artikal/30512948/vw-golf-2-dizel-tek-registrovan/',
'Ilijaš',
'1985',
'Dizel',
1550,
'KORIŠTENO',
'Jučer, 16:05'),
('Golf 5 2.0 DIZEL SDI TEK REGISTROVAN',
'https://www.olx.ba/artikal/30471980/golf-5-2-0-dizel-sdi-tek-registrovan/',
'Travnik',
'2004',
'Dizel',
7950,
'KORIŠTENO',
'Prije 5 dana'),
('Volkswagen Golf 6 2.0 TDI GTI-GTD-R LINE',
'https://www.olx.ba/artikal/30478894/volkswagen-golf-6-2-0-tdi-gti-gtd-r-line/',
'Banja Luka',
'2010',
'Dizel',
19500,
'KORIŠTENO',
'Prije 7 dana'),
('VW GOLF 5,2.0 TDI,103 KW,04 G.P,6 BRZ.MOTOR U KVARU',
'https://www.olx.ba/artikal/30485008/vw-golf-5-2-0-tdi-103-kw-04-g-p-6-brz-motor-u-kvaru/',
'Prnjavor',
'2004',
'Dizel',
5555,
'KORIŠTENO',
'Prije 4 dana'),
('VW Golf 6 2.0 TDI XENON-NAVI-KAMERA-KOZA',
'https://www.olx.ba/artikal/30448040/vw-golf-6-2-0-tdi-xenon-navi-kamera-koza/',
'Banja Luka',
'2010',
'Dizel',
19500,
'KORIŠTENO',
'Prije 7 dana'),
...and so on.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.