python scrapy 传递参数meta用法

    科技2025-01-26  5

    meta怎么用可以参考一下下面的链接~

    https://www.zhihu.com/question/54773510

    昨天主要是怕取了一下网页里面的链接,再把各个链接里面的内容爬取下来。但是如果碰到一下情况,就需要用到这个meta啦

    比如:一个标题A,上面有一个链接B,链接B里面有内容C,如果要把标题A和内容C一一对应的话,在scrapy里面用meta就比较容易实现啦。

    下面举例。比如下面有一些内容,需要点进去查看里面的内容:

    比如要把店铺名称和乘车路线搭配起来保存或者输出,就可以用到meta啦,具体操作如下(setting设置就不再讲咯,前面的内容都有提到过很多次了,记得开通管道哟):

    ① 爬虫文件内容:

    import scrapy from yxq.items import YxqItem class File01Spider(scrapy.Spider): name = 'file01' start_urls = ['http://www.jkl.com.cn/cn/shopLis.aspx?id=862'] page = 2 def parse(self, response): item = YxqItem() name = response.xpath('//span[@class="con01"]/text()').extract()[0] urls = response.xpath('//div[@class="shopLis"]//a/@href').extract()[0] name = name.strip() urls = 'http://www.jkl.com.cn/cn/'+ urls item['name'] = name yield scrapy.Request(url=urls,callback=self.pg,meta={'item':item}) def pg(self,response): item = response.meta['item'] road = response.xpath('//div[@class="text"]/p[2]/text()').extract()[0] item['road'] = road yield item

    ②items.py内容

    import scrapy class YxqItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() name = scrapy.Field() road = scrapy.Field()

    ③ pipelines.py文件

    class YxqPipeline: def process_item(self, item, spider): name = item['name'] road = item['road'] print(name) print(road) return item

    pipelines里面我这里示例就直接打印了,如果只是需要输出打印的话,管道可以关闭也没事,直接在爬虫文件内打印即可~

    效果如下:

    Processed: 0.010, SQL: 8