【发布时间】:2019-01-16 02:59:53
【问题描述】:
我现在正在学习 scrappy,并且正在构建一个简单的房地产网站抓取工具。使用此代码,我试图抓取特定城市房地产列表的所有 URL。我的代码遇到了以下错误 - “不能混合 str 和非 str 参数”。
我相信我已经将我的问题与我的部分代码隔离了
props = response.xpath('//div[@class = "address ellipsis"]/a/@href').extract()
如果我在props xpath 分配中使用extract_first() 函数而不是extract 函数,那么代码就可以工作。它抓取每个页面上属性的第一个链接。然而,这最终不是我想要的。如果我使用 extract_first() 方法,我相信我的 xpath 调用正确,因为代码运行。
有人可以解释我在这里做错了什么吗?我在下面列出了我的完整代码
import scrapy
from scrapy.http import Request
class AdvancedSpider(scrapy.Spider):
name = 'advanced'
allowed_domains = ['www.realtor.com']
start_urls = ['http://www.realtor.com/realestateandhomes-search/Houston_TX/']
def parse(self, response):
props = response.xpath('//div[@class = "address ellipsis"]/a/@href').extract()
for prop in props:
absolute_url = response.urljoin(props)
yield Request(absolute_url, callback=self.parse_props)
next_page_url = response.xpath('//a[@class = "next"]/@href').extract_first()
absolute_next_page_url = response.urljoin(next_page_url)
yield scrapy.Request(absolute_next_page_url)
def parse_props(self, response):
pass
如果我能澄清任何事情,请告诉我。
【问题讨论】:
标签: python-3.x web-scraping scrapy