首页 > 解决方案 > Scraping multiple pages with python

问题描述

I'm trying to scrape a multiple page website with beautiful soup. The code works partially. It returns only the last one page instead of all pages. How can I fix the problem?

# import libraries
import urllib.request
from bs4 import BeautifulSoup

# specify the url
aziende = [
'35-azienda-4_planets', '36-azienda-archivio_23', '24-azienda-bm', '16-azienda-brolese_virginio', '39-azienda-castellani', '19-azienda-centro_ottico_bisa', '25-azienda-comel_optik', '37-azienda-de_lorenzo_occhiali', '15-azienda-delta_laser', '34-azienda-dem', '21-azienda-erizzo', '3-azienda-evo', '27-azienda-farben_occhialeria', '32-azienda-gio__eyewear', '7-azienda-gipizeta', '42-azienda-h8', '20-azienda-idea_91', '5-azienda-lem', '41-azienda-lasertec', '22-azienda-le_thi_thu_thu', '28-azienda-m1', '1-azienda-mati_', '38-azienda-metal_dream', '30-azienda-mictu', '23-azienda-nete', '10-azienda-new_italian_design_eyewear', '31-azienda-okki_lux', '9-azienda-ottica_pra_floriani', '12-azienda-pao', '40-azienda-palladio_occhiali', '29-azienda-plastil_due', '17-azienda-punti_di_vista', '14-azienda-quemme', '4-azienda-red_line', '43-azienda-revert', '33-azienda-sm', '6-azienda-scussel', '8-azienda-sistem', '18-azienda-stile_italiano', '26-azienda-tecnodanta', '11-azienda-toffoli_costantino', '13-azienda-tri_color', '2-azienda-zago'
        ]
for azienda in aziende:
    page_link = 'http://www.occhialeriabellunotreviso.it/' + azienda
    page = urllib.request.urlopen(page_link ) # query the website and return the html to the variable ‘page’
    soup = BeautifulSoup(page, 'html.parser') # parse the html using beautiful soup and store in variable `soup`



# Take out the <div> of name and get its value
name_box = soup.find('h2')

name = name_box.text.strip() # strip() is used to remove starting and trailing
print (name)

标签: pythonweb-scrapingbeautifulsoup

解决方案


Just put the final lines of code that are outside the for-loop inside the for-loop so they are run for every page.

# import libraries
import urllib.request
from bs4 import BeautifulSoup

# specify the url
aziende = [
'35-azienda-4_planets', '36-azienda-archivio_23', '24-azienda-bm', '16-azienda-brolese_virginio', '39-azienda-castellani', '19-azienda-centro_ottico_bisa', '25-azienda-comel_optik', '37-azienda-de_lorenzo_occhiali', '15-azienda-delta_laser', '34-azienda-dem', '21-azienda-erizzo', '3-azienda-evo', '27-azienda-farben_occhialeria', '32-azienda-gio__eyewear', '7-azienda-gipizeta', '42-azienda-h8', '20-azienda-idea_91', '5-azienda-lem', '41-azienda-lasertec', '22-azienda-le_thi_thu_thu', '28-azienda-m1', '1-azienda-mati_', '38-azienda-metal_dream', '30-azienda-mictu', '23-azienda-nete', '10-azienda-new_italian_design_eyewear', '31-azienda-okki_lux', '9-azienda-ottica_pra_floriani', '12-azienda-pao', '40-azienda-palladio_occhiali', '29-azienda-plastil_due', '17-azienda-punti_di_vista', '14-azienda-quemme', '4-azienda-red_line', '43-azienda-revert', '33-azienda-sm', '6-azienda-scussel', '8-azienda-sistem', '18-azienda-stile_italiano', '26-azienda-tecnodanta', '11-azienda-toffoli_costantino', '13-azienda-tri_color', '2-azienda-zago'
        ]
for azienda in aziende:
    page_link = 'http://www.occhialeriabellunotreviso.it/' + azienda
    page = urllib.request.urlopen(page_link ) # query the website and return the html to the variable ‘page’
    soup = BeautifulSoup(page, 'html.parser') # parse the html using beautiful soup and store in variable `soup`

    # Take out the <div> of name and get its value
    name_box = soup.find('h2')

    name = name_box.text.strip() # strip() is used to remove starting and trailing
    print (name)

推荐阅读