Python Scrapy爬虫未完成解析函数中的所有循环
我的爬虫里有这个代码Python Scrapy爬虫未完成解析函数中的所有循环,python,screen-scraping,scrapy,Python,Screen Scraping,Scrapy,我的爬虫里有这个代码 class StackSpider(InitSpider): name = 'stack' allowed_domains = ['sitepoint.com'] start_urls = ["http://www.sitepoint.com"] start_page = "http://www.sitepoint.com" item = StackItem() def init_request(self):
class StackSpider(InitSpider):
name = 'stack'
allowed_domains = ['sitepoint.com']
start_urls = ["http://www.sitepoint.com"]
start_page = "http://www.sitepoint.com"
item = StackItem()
def init_request(self):
return Request(url=self.start_page, callback=self.parse)
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//div[@class="headline_area"]')
items = []
ivar = 1
for site in sites[:5]:
item = StackItem()
log.msg(' LOOP' +str(ivar)+ '', level=log.ERROR)
item['title'] ="yoo ma"
request = Request("http://www.sitepoint.com/getting-to-know-css3-selectors-structural-pseudo-classes/", callback=self.test1)
request.meta['item'] = item
ivar = ivar + 1
yield request
def test1(self, response):
log.msg(' LOOP 2 \n', level=log.ERROR)
item = response.meta['item']
item['desc'] = "test4"
return item
我按照做了,但它只在一个循环上工作。
我的意思是我只能在屏幕上看到日志
LOOP1
LOOP2
应该重复3次
我尝试了回报和收益的不同组合,所以
返回请求
和返回项
给出输出LOOP1 LOOP2
yield request
和return item
给出输出LOOP1 LOOP1 LOOP2
yield request
和yield item
给出输出LOOP1 LOOP1 LOOP2
return request
和yield item
给出输出LOOP1 LOOP2
如何获取
循环1 LOOP2 LOOP1 LOOP2等等
我认为您没有进入循环2
的原因是您在请求中对url进行了硬编码。Scrapy不要多次访问已访问的URL
尝试更改该URL,看看它是如何运行的。不要依赖消息的顺序,因为请求不按顺序发生
问题在您的循环中
for site in sites[:5]:
您多次在循环中请求同一URL
Scrapy默认过滤相同的请求并忽略它们
如果要多次请求同一URL,则需要设置dont\u filter=True
request = Request("http://www.sitepoint.com/getting-to-know-css3-selectors-structural-pseudo-classes/",
dont_filter=True,
callback=self.test1)
然后应该重复3次显然,sites=hxs.select(“//div[@class=“top”]”)只返回两项……没有人能够证明这一点,因为您缺少重要信息,无法进一步复制这一点。因此-1I可以确认它有许多来自刮壳的物品。这就是为什么我要切片来测试你能确认的东西并不重要,尤其是我不相信那些不能自己复制的声明……再一次:修正你的压痕@user1833746试着变得好一点。建议某人提出问题可以改进其问题的方式是很好的;但是试着用一种有帮助的、积极的语气去做。不要过滤是我的问题。这就是使用框架的问题。太多未知变量。@PraveenSinghYadav这真的不是问题没有太多未知变量你所要做的就是检查文档