2017-06-19 2 views
2

Jede Hilfe wäre willkommen, da ich neu bei Python bin. Ich habe den folgenden Web Crawler erstellt, aber es crawl nicht alle Seiten, nur 2 Seiten. Welche Änderungen müssen vorgenommen werden, damit alle Seiten gecrawlt werden können?My BeautifulSoup Spider kriecht nur 2 Seiten nicht alle Seiten

Siehe def trade_spider (max_pages) Schleife und am unteren Rand habe ich Trade_Spider (18), die alle Seiten durchlaufen sollte.

Danke für Ihre Hilfe.

import csv 
import re 
import requests 
from bs4 import BeautifulSoup 

f = open('dataoutput.csv','w', newline= "") 
writer = csv.writer(f) 

def trade_spider(max_pages): 
    page = 1 
    while page <= max_pages: 
     url = 'http://www.zoopla.co.uk/for-sale/property/nottingham/?price_max=200000&identifier=nottingham&q=Nottingham&search_source=home&radius=0&pn=' + str(page) + '&page_size=100' 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text) 
     for link in soup.findAll('a', {'class': 'listing-results-price text-price'}): 
      href = "http://www.zoopla.co.uk" + link.get('href') 
      title = link.string 
      get_single_item_data(href) 
     page += 1 
def get_single_item_data(item_url): 
    source_code = requests.get(item_url) 
    plain_text = source_code.text 
    soup = BeautifulSoup(plain_text) 

    for item_name in soup.findAll('h2', {'itemprop': 'streetAddress'}): 
    address = item_name.get_text(strip=True) 
writer.writerow([address]) 
trade_spider(18) 
+0

Gibt es einen Fehler, der auftritt oder wird sauber beendet? Verursacht die Variable 'page' 18 oder nur 2? –

Antwort

0

Ihr Code funktioniert gut, es crawl alle Seiten (obwohl es nur 14 Seiten nicht 18 sind). Es scheint, als ob Sie versuchen, die Straßenadresse zu scracken. In diesem Fall ist die zweite Funktion unnötig und macht Ihren Crawler nur langsam, indem Sie requests.get() zu oft aufrufen. Ich habe den Code etwas modifiziert, aber dieser ist schneller.

import csv 
import re 
import requests 
from bs4 import BeautifulSoup 

f = open('dataoutput.csv','w', newline="") 
writer = csv.writer(f) 

def trade_spider(max_pages): 
    page = 1 
    while page <= max_pages: 
     furl = 'http://www.zoopla.co.uk/for-sale/property/nottingham/?price_max=200000&identifier=nottingham&q=Nottingham&search_source=home&radius=0&pn=' + str(page) + '&page_size=100' 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text) 

     # Changed the class' value 

     for link in soup.findAll('a', {'class': 'listing-results-address'}):  
      #href = "http://www.zoopla.co.uk" + link.get('href') 
      #title = link.string 
      #get_single_item_data(href) 
      address = link.get_text() 
      print (address)    # Just to check it is working fine. 
      writer.writerow([address]) 

     print (page) 
     page += 1 

# Unnecessary code 

'''def get_single_item_data(item_url): 
source_code = requests.get(item_url) 
plain_text = source_code.text 
soup = BeautifulSoup(plain_text) 

for item_name in soup.findAll('h2', {'itemprop': 'streetAddress'}): 
    address = item_name.get_text(strip=True) 
    writer.writerow([address])''' 

trade_spider(18) 
+0

Danke Rajeev, sieht aus wie der obige Code wird die Adresse bekommen, aber ich will mehr Informationen als die Adresse, die es braucht, um in jeden Link zu gehen und diese Informationen zu bekommen. Auch das Setzen von trade_spider (14) liefert immer noch nur 2 Seiten Ergebnisse, irgendwelche Ideen? – hello11

+0

Ich wiederholte Ihren Code und es gab Informationen von allen Seiten zurück. Vielleicht verursacht ein anderer Teil des Codes (den Sie möglicherweise nicht gepostet haben) das Problem – Rajeev

+0

Danke Rajeev, es gibt einen nicht typspezifischen Fehler. Wie komme ich an keinem Typ vorbei? – hello11

Verwandte Themen