我正在使用scrapy报废一个网站,我在一个循环中,每个项目都有我想去的链接,每次在循环中。
import scrapy
class MyDomainSpider(scrapy.Spider):
name = 'My_Domain'
allowed_domains = ['MyDomain.com']
start_urls = ['https://example.com']
def parse(self, response):
Colums = response.xpath('//*[@id="tab-5"]/ul/li')
for colom in Colums:
title = colom.xpath('//*[@class="lng_cont_name"]/text()').extract_first()
address = colom.xpath('//*[@class="adWidth cont_sw_addr"]/text()').extract_first()
con_address = address[9:-9]
url= colom.xpath('//*[@id="tab-5"]/ul/li/@data-href').extract_first()
print(url)
print('*********************')
yield scrapy.Request(url, callback = self.parse_dir_contents)
def parse_dir_contents(self, response):
print('000000000000000000')
a = response.xpath('//*[@class="fn"]/text()').extract_first()
print(a)我尝试过这样的方法,但是0只打印了一次,但是星号打印了10次,我想让它运行第二个函数,让它在每次循环运行时运行。
发布于 2019-04-27 15:29:00
您可能正在做一些不是故意的事情。使用
url = colom.xpath('//*[@id="tab-5"]/ul/li/@data-href').extract_first()在循环中,url总是产生相同的值。默认情况下,Scrapy会过滤重复请求(请参阅here)。如果你真的想要多次抓取同一个网址,你可以使用scrapy.Request构造函数的dont_filter=True参数来禁用请求级别的过滤。然而,我认为您真正想要的是这样(只剩下代码的相关部分):
def parse(self, response):
Colums = response.xpath('//*[@id="tab-5"]/ul/li')
for colom in Colums:
url = colom.xpath('./@data-href').extract_first()
yield scrapy.Request(url, callback=self.parse_dir_contents)https://stackoverflow.com/questions/55878092
复制相似问题