Als Anfänger zu scrapy konnte ich nicht herausfinden, warum diese Spinne Daten von einer Website nicht crawlen. Ich habe über stackoverflow nach möglichen Antworten gesucht, aber ich sehe, dass es nicht angemessen adressiert wird. Ich versuche, eine kleine Stadt-Restaurant Liste von der Website zu kratzen. Ich habe keine detaillierten Kenntnisse über die Sicherheitsmerkmale der Website zu scrape.Ist das Problem mit den XPath-Auswahlelementen verbunden? Die Spinne läuft gut, außer es kratzt nichts. Können Sie bitte vorschlagen, warum es nicht kratzt und wie man das Problem löst. Die Spinne hat den folgenden Code:scrapy/Python kriecht, kratzt aber nicht Daten
try:
from scrapy.spiders import Spider
from urllib.parse import urljoin
from scrapy.selector import Selector
from scrapy.http import Request
except ImportError:
print ("\nERROR IMPORTING THE NESSASARY LIBRARIES\n")
#scrapy.optional_features.remove('boto')
class YelpSpider(Spider):
name = 'yelp_spider'
allowed_domains=["yelp.com"]
headers=['venuename','services','address','phone','location']
def __init__(self):
self.start_urls = ['https://www.yelp.com/springfield-il-us']
def start_requests(self):
requests = []
for item in self.start_urls:
requests.append(Request(url=item, headers={'Referer':'http://www.google.com/'}))
return requests
def parse(self, response):
requests=[]
sel=Selector(response)
restaurants=sel.xpath('//*[@id="wrap"]/div[4]/div/div[1]/div/div[3]/div[1]/div[1]/h1')
items=[]
for restaurant in restaurants:
item=YelpRestaurantItem()
item['venuename']=sel.xpath('//*[@id="wrap"]/div[4]/div/div[1]/div/div[3]/div[1]/div[1]/h1')
item['services']=sel.xpath('//*[@id="wrap"]/div[4]/div/div[1]/div/div[3]/div[1]/div[2]/div[2]/span[2]/a[1]')
item['address']=sel.xpath('//*[@id="wrap"]/div[4]/div/div[1]/div/div[4]/div[1]/div/div[2]/ul/li[1]/div/strong/address')
item['phone']=sel.xpath('//*[@id="wrap"]/div[4]/div/div[1]/div/div[4]/div[1]/div/div[2]/ul/li[3]/span[3]')
item['location']=sel.xpath('//*[@id="dropperText_Mast"]')
item['url']=response.url
items.append(item)
yield item
Mein items.py hat den folgenden Code ein:
import scrapy
class YelpRestaurantItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
url=scrapy.Field()
venuename = scrapy.Field()
services = scrapy.Field()
address = scrapy.Field()
phone = scrapy.Field()
location=scrapy.Field()
Ich nehme an, dass Sie Probleme mit dem Einzug haben, bitte korrigieren Sie Ihren Code in der Frage. Und haben Sie versucht, Ihren Code zu debuggen? vielleicht etwas in jeder Iteration von "für Restaurant ..." drucken? – eLRuLL
Was versuchen Sie zu kratzen? Die Spinne sucht nach etwas mit einem ID-Attribut, das "wrap" ist, aber wenn ich die Start-URL öffne, finde ich nichts, was dazu passt. – Casper
@Casper, ich versuche Name, Dienste, Adresse, Telefon, Standort zu kratzen. Ich sollte auch sagen, dies ist das erste Mal, dass ich Xpath und Scrapy benutze.Ich habe gerade den xpath für ein Restaurant kopiert, das in Chrome/Developer Tools hervorgehoben wurde. Ich wollte jedoch eine Liste von Restaurantbetrieben in dieser kleinen Stadt hervorheben, nämlich Name, Dienstleistungen, Adresse, Telefon und Standort. – Kaleab