0
我已经在scrapy中编写了一个脚本来递归爬取网站。但由于某种原因,它无法做到。我已经在崇高中测试了xpaths,并且它工作得很完美。所以,在这一点上,我无法解决我做错了什么。当两个规则设置为递归时,Scrapy无法抓取
“items.py” 包括:
import scrapy
class CraigpItem(scrapy.Item):
Name = scrapy.Field()
Grading = scrapy.Field()
Address = scrapy.Field()
Phone = scrapy.Field()
Website = scrapy.Field()
名为 “craigsp.py” 蜘蛛包括:
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class CraigspSpider(CrawlSpider):
name = "craigsp"
allowed_domains = ["craigperler.com"]
start_urls = ['https://www.americangemsociety.org/en/find-a-jeweler']
rules=[Rule(LinkExtractor(restrict_xpaths='//area')),
Rule(LinkExtractor(restrict_xpaths='//a[@class="jeweler__link"]'),callback='parse_items')]
def parse_items(self, response):
page = response.xpath('//div[@class="page__content"]')
for titles in page:
AA= titles.xpath('.//h1[@class="page__heading"]/text()').extract()
BB= titles.xpath('.//p[@class="appraiser__grading"]/strong/text()').extract()
CC = titles.xpath('.//p[@class="appraiser__hours"]/text()').extract()
DD = titles.xpath('.//p[@class="appraiser__phone"]/text()').extract()
EE = titles.xpath('.//p[@class="appraiser__website"]/a[@class="appraiser__link"]/@href').extract()
yield {'Name':AA,'Grading':BB,'Address':CC,'Phone':DD,'Website':EE}
我与运行的命令是:
scrapy crawl craigsp -o items.csv
希望有人能带领我走向正确的方向。
哦,我的天啊!它现在工作完美。感谢zillion先生的Granitosaurus。你能告诉我为什么它不能与我之前在允许的域部分写的东西导致许多其他网站,当我尝试使用相同的爬网成功。顺便说一句,这一次 我运行保持空白。如果我想填写允许的域部分,除了留空之外,我可以写些什么。再次感谢先生。 – SIM
@ SMth80 unforutantely此设置不支持通配符,因此默认情况下,所以您需要输入您手动预期的所有域。但是,通过扩展一个允许使用正则表达式模式的中间件(例如,'。+ \ .com'允许所有的.com域),您可以非常容易地扩展此功能。在这里看到我对这个问题的答案:http://stackoverflow.com/questions/39093211/scrapy-offsite-request-to-be-processed-based-on-a-regex/39098601#39098601 – Granitosaurus
再次感谢先生,为您的善意的回复。要遵循你提供的链接。 – SIM