使用Python Scrapy获取商品URL后如何爬取每个链接的商品描述
实现方案
你现在的代码已经可以从列表页提取到商品名称、价格、单位和详情链接,只需要在现有基础上新增详情页请求逻辑,通过Scrapy的Request携带已提取的列表数据,到详情页补全描述字段即可。
import scrapy class aldi2(scrapy.Spider): name = 'aldi2' start_urls = ['https://www.aldi.nl/producten/brood-bakkerij/dagvers-brood.html'] def parse(self, response): for products in response.css('div.mod.mod-article-tile.mod-article-tile--default.ct-backwaren'): # 先把列表页拿到的字段存在item字典里 item = { 'name': products.css('span.mod-article-tile__title::text').get().replace('\n','').replace('\t',''), 'price': products.css('span.price__wrapper::text').get().replace('\n','').replace('\t',''), 'unit' : products.css('span.price__unit::text').get().replace('\n',''), 'link' : products.css('a.mod-article-tile__action').attrib['href'] } # 拼接完整的详情页URL,发起请求,通过meta传item,回调到parse_detail处理详情页 detail_url = response.urljoin(item['link']) yield scrapy.Request( url=detail_url, callback=self.parse_detail, meta={'item': item} ) def parse_detail(self, response): # 拿到之前传过来的列表页数据 item = response.meta['item'] # 这里替换成你站点实际的商品描述CSS选择器即可 item['description'] = response.css('你要改的描述选择器::text').get().strip() # 最后返回完整的所有字段 yield item
注意事项
- 代码里
parse_detail方法中的CSS选择器需要你自己打开商品详情页,通过F12开发者工具定位到描述对应的元素,替换掉示例里的占位选择器即可 - 要是站点的详情页描述有多段内容,把
get()改成getall()再拼接即可,比如''.join(response.css('xxx::text').getall()).strip() - 用
response.urljoin()处理链接是为了兼容相对路径的情况,哪怕站点返回的是绝对路径,这个方法也不会报错,通用性更强
内容的提问来源于stack exchange,提问作者Corco1993
相关产品推荐
相关产品推荐

