このスパイダーがWebサイトからクロールする理由を調べない理由はわかりませんでした。私は可能な答えについては、stackoverflowを探しているが、私はそれが適切に対処されていないことがわかります。私はウェブサイトから小さな町 - レストランのリストを掻き取ろうとしています。私はウェブサイトのセキュリティ機能の詳細な知識は持っていません。XPathの選択要素に関連した問題ですか?クモは何も傷つけない以外は正常に動作します。あなたはそれがかき消されない理由と問題を解決する方法をお勧めしますか?scrapy/Pythonはクロールしますが、データを削っていません
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
マイitems.pyは、次のコードがあります:
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()
私はあなたがインデントの問題を抱えていると仮定します。問題のコードを修正してください。そして、コードをデバッグしようとしましたか?たぶん、レストランのためのすべての反復で何かを印刷する...? – eLRuLL
何を掻き取ろうとしていますか?スパイダーはid属性が "wrap"であるものを探しますが、開始URLを開くとこれに一致するものは見つかりません。 – Casper
@Casper、私は名前、サービス、住所、電話、場所を掻き取ろうとしています。私はまた、これは私の初めてのxpathと治療法を使用して言う必要があります。Chrome /開発者ツールで強調表示されたレストランのxpathをコピーしました。しかし、私は、この小さな町のレストラン事業の名前、サービス、住所、電話番号、場所などを集めたかったのです。 – Kaleab