【问题标题】:BeautifulSoup can't scrape multiple pagesBeautifulSoup 无法抓取多个页面
【发布时间】:2018-07-29 15:51:56
【问题描述】:

我正在尝试使用 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))

【问题讨论】:

    标签: python html dataframe web-scraping beautifulsoup


    【解决方案1】:

    您只需选择所有 <div>listitem 类,即可从页面获取所有项目,而不仅仅是特色汽车。

    我对您的代码进行了一些更改并检查以成功抓取所有 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 2017-06-12
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      相关资源
      最近更新 更多