【发布时间】:2017-09-04 14:44:39
【问题描述】:
作为一个scrapy的新手,我不明白为什么这个蜘蛛不会从一个网站爬取数据来爬取。我已经在 stackoverflow 中搜索了可能的答案,但我发现它没有得到充分解决。我正在尝试从网站上抓取一个小镇餐厅列表。我对要抓取的网站的安全特性没有详细的了解。问题是否与 XPath 选择元素有关?蜘蛛运行良好,只是它不抓取任何东西。您能否建议它为什么不刮以及如何解决问题。蜘蛛有以下代码:
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()
【问题讨论】:
-
我假设您遇到缩进问题,请更正问题中的代码。而且,您是否尝试过调试您的代码?也许在
for restaurant ...的每次迭代中打印一些东西? -
你想刮什么?蜘蛛搜索带有“wrap”的 id 属性的东西,但是当我打开开始 url 时,我没有找到任何匹配的东西。
-
@Casper ,我正在尝试抓取姓名、服务、地址、电话、位置。我还应该说,这是我第一次使用 xpath 和 scrapy。我刚刚为一家在 Chrome/Developer Tools 中突出显示的餐厅复制了 xpath。但是,我想在这个小镇上抓取一份餐馆企业列表,包括名称、服务、地址、电话和位置。
标签: python xpath web-scraping scrapy