【发布时间】:2020-09-21 10:24:16
【问题描述】:
所以我试图用 scrapy 在网上搜索一些评论。我遍历了我所有项目所在的容器,以减少请求的数量并使蜘蛛更快。我在完成整个抓取后得到的 csv 显示蜘蛛有时会复制超过 20 行或更多行中收集的数据。 但是,当我不循环遍历容器时,蜘蛛会非常缓慢,在几页后停止抓取但正确返回数据。
我还通过更改 url 值生成了下一页,如下面的代码所示。我这样做是因为 html 没有下一页图标的 href 值。
我不知道怎么了。我需要帮助!
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.loader import ItemLoader
from yelp.items import YelpItem
import urllib.parse
from scrapy.http.request import Request
from scrapy.loader.processors import TakeFirst, MapCompose, Join
from scrapy.linkextractors import LinkExtractor
class RestSpider(scrapy.Spider):
name = 'rest'
start_urls = ['https://www.yelp.com/biz/burma-superstar-san-francisco-2?osq=Restaurants/']
def parse(self, response):
pages = [str(i) for i in range(0,6800,20)]
for page in pages:
url = 'https://www.yelp.com/biz/burma-superstar-san-francisco-2?osq=Restaurants&start='+page
yield Request(urllib.parse.urljoin(response.url, url))
selectors = response.xpath("//div[contains(@class,'lsidebarActionsHoverTarget')]")
for selector in selectors:
yield self.parse_item(selector, response)
def parse_item(self,selector,response):
l=ItemLoader(item=YelpItem(),selector = response)
l.default_output_processor = TakeFirst()
l.add_xpath('date', './/span[@class="lemon--span__373c0__3997G text__373c0__2Kxyz text-color--mid__373c0__jCeOG text-align--left__373c0__2XGa-"]/text()')
l.add_xpath('location', './/span[@class="lemon--span__373c0__3997G text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--bold__373c0__1elNz text-size--small__373c0__3NVWO"]/text()')
l.add_xpath('review', './/p[contains(@class, "comment")]/span/text()')
l.add_xpath('rating', './/div[contains(@class,"i-stars")]/@aria-label')
return l.load_item()
【问题讨论】:
标签: python web-scraping scrapy