Python 爬行蜘蛛不会刮东西
评论内容是一种在没有爬行蜘蛛的情况下对页面进行爬行的方法,这里有人帮了我。但我还是想学习如何让爬行蜘蛛工作,因为我知道 我没有收到任何错误,但它刮去了0页,我检查了很多线程,听起来好像出于某种原因我不得不添加一个Python 爬行蜘蛛不会刮东西,python,scrapy,Python,Scrapy,评论内容是一种在没有爬行蜘蛛的情况下对页面进行爬行的方法,这里有人帮了我。但我还是想学习如何让爬行蜘蛛工作,因为我知道 我没有收到任何错误,但它刮去了0页,我检查了很多线程,听起来好像出于某种原因我不得不添加一个parse\u start\u url,但这没有帮助,更改parse函数的名称也没有帮助 什么不起作用?我的规则是不正确的还是遗漏了什么?allow应该是URL的REGEX,而不是xpath 如果要使用xpath,则需要使用restrict\u xpath您需要将规则更改为以下内容:
parse\u start\u url
,但这没有帮助,更改parse函数的名称也没有帮助
什么不起作用?我的规则是不正确的还是遗漏了什么?allow应该是URL的
REGEX
,而不是xpath
如果要使用xpath,则需要使用
restrict\u xpath
您需要将规则更改为以下内容:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
#scrapy crawl dmoz -o items.json -t json
from scrapy.http import Request
from urlparse import urlparse
from manga.items import MangaItem
class MangaHere(CrawlSpider):
name = "mangahs"
allowed_domains = ["mangahere.com"]
start_urls = ["http://www.mangahere.com/seinen/"]
rules = [Rule(SgmlLinkExtractor(allow = ('//a[@class="next"]')), follow=True,
callback='parse_item'),]
#def parse(self, response):
# get indext depth for every page
# hxs = HtmlXPathSelector(response)
# next_link = hxs.select('//a[@class="next"]')
# index_depth = int(next_link.select('preceding-sibling::a[1]/text()').extract()[0])
#create a request for the first page
# url = urlparse("http://www.mangahere.com/seinen/")
# yield Request(url.geturl(), callback=self.parse_item)
#create a request for each subsequent page in the form "./seinen/x.html"
# for x in xrange(2, index_depth):
# pageURL = "http://www.mangahere.com/seinen/%s.htm" % x
# url = urlparse(pageURL)
# yield Request(url.geturl(), callback=self.parse_item)
def parse_start_url(self, response):
list(self.parse_item(response))
def parse_item(self,response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//ul/li/div')
items = []
for site in sites:
rating = site.select("p/span/text()").extract()
desc = site.select("p[2]/text()").extract()
for i in rating:
for p in desc:
if float(i) > 4.8 and "ecchi" not in str(p):
item = MangaItem()
item['title'] = site.select("div/a/text()").extract()
item['link'] = site.select("div/a/@href").extract()
item['desc'] = site.select("p[2]/text()").extract()
item['rate'] = site.select("p/span/text()").extract()
items.append(item)
return items
规则中的回调与方法不匹配。CrawlSpider有一个名为parse的默认方法,因此
def parse(CrawlSpider)
应该更改为def parse_item
以匹配您的回调谢谢,我添加了一个限制路径,没有允许路径,它似乎正在工作!在这件事上浪费了很多时间>
rules = [Rule(SgmlLinkExtractor(allow = ('/\d+.htm')), follow=True,
callback='parse_item'),]