<p>您的代码中存在类函数<code>parse_page</code>的缩进问题,您错误地将其命名为“parse”而不是“parse\u page”。这可能就是你的代码不能正常工作的原因。修改后的代码如下所示,对我来说效果很好:</p>
<pre><code>import scrapy
from scrapy import Request
class ConventionSpider(scrapy.Spider):
name = 'Convention'
allowed_domains = ['events.jspargo.com/ASCB18/Public/Exhibitors.aspx?sortMenu=102003']
start_urls = ['https://events.jspargo.com/ASCB18/Public/Exhibitors.aspx?sortMenu=102003']
def parse(self, response):
name = response.xpath('//*[@class="companyName"]')
number = response.xpath('//*[@class="boothLabel"]')
link = response.xpath('//*[@class="companyName"]')
for row, row1, row2 in zip(name, number, link):
company = row.xpath('.//*[@class="exhibitorName"]/text()').extract_first(),
booth_num = row1.xpath('.//*[@class="boothLabel aa-mapIt"]/text()').extract_first()
next_page_url = row2.xpath('.//a/@href').extract_first()
next_page_url = response.urljoin(next_page_url)
yield Request(next_page_url, callback=self.parse_page, meta={'Company': company, 'Booth Number': booth_num}, dont_filter=True)
def parse_page(self, response):
company = response.meta.get('Company')
booth_num = response.meta.get('Booth Number')
website = response.xpath('//a[@class="aa-BoothContactUrl"]/text()').extract_first()
yield {'Company': company, 'Booth Number': booth_num, 'Website': website}
</code></pre>