首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrapy,如何为每个页面创建不同的标题?

Scrapy,如何为每个页面创建不同的标题?
EN

Stack Overflow用户
提问于 2020-04-24 11:16:02
回答 1查看 278关注 0票数 1

我是scrapy新手,所以请善待我:))

因此,我将使用scrapy从devtools-Network的多个页面中抓取一些JSON文件。但是,每个页面都有不同的标题。我该如何解决这个问题呢?

让我们使用这个

代码语言:javascript
复制
    import scrapy
    import json


        import scrapy
    import json


    class QuoteSpider(scrapy.Spider):
        name = 'quote'
        allowed_domains = ['shopee.co.id']
        page = 1
        start_urls = ['https://shopee.co.id/api/v2/search_items/?by=relevancy&keyword=deodorant&limit=50&newest=0&order=desc&page_type=search&version=2']

    def parse(self, response):
        data = json.loads(response.text)
        for quote in data["quotes"]:
            yield {"quote": quote["text"]}
        if data["has_next"]:
            self.page += 1

            url = "https://shopee.co.id/api/v2/search_items/?by=relevancy&keyword=deodorant&limit=50&newest="+str(self.page)+"&order=desc&page_type=search&version=2"

            headers = {
            'accept'          : '*/*'
            ,'accept-encoding': 'gzip, deflate, br'
            ,'accept-language': 'en-US,en;q=0.9'
            ,'if-none-match-' : '55b03-ba4b020f9bad34856fc4771b0aaedc93'
            ,'referer'        : 'https://shopee.co.id/search?keyword=deodorant&page='+str(self.page)
            ,'sec-fetch-dest' : 'empty'
            ,'sec-fetch-mode' : 'cors'
            ,'sec-fetch-site' : 'same-origin'
            ,'user-agent'     : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'
            ,'x-api-source'   : 'pc'
            ,'x-requested-with': 'XMLHttpRequest'
        }

            yield scrapy.Request(url=url, callback=self.parse, method='GET', headers=headers)

如何为每个页面添加唯一的标题,例如,

代码语言:javascript
复制
header = {
     'referer': 'some_reference_pagenumber',
     }

我尝试了这个脚本,并试图对其进行修补,但它总是导致shell中的referer:none,因此无法擦除

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-10-16 00:38:19

你不需要在页眉中添加你想要改变的参数。假设您想要根据某些逻辑更改'referer',然后在不使用'referer'的情况下初始化头。

代码语言:javascript
复制
headers = {
            'accept'          : '*/*'
            ,'accept-encoding': 'gzip, deflate, br'
            ,'accept-language': 'en-US,en;q=0.9'
            ,'if-none-match-' : '55b03-ba4b020f9bad34856fc4771b0aaedc93'
            ,'sec-fetch-dest' : 'empty'
            ,'sec-fetch-mode' : 'cors'
            ,'sec-fetch-site' : 'same-origin'
            ,'user-agent'     : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'
            ,'x-api-source'   : 'pc'
            ,'x-requested-with': 'XMLHttpRequest'
        }

如您所知,headers是一个字典,我们可以根据需要添加它。所以现在我们可以根据我们的逻辑附加它。如下所示:

代码语言:javascript
复制
if 'deoderand' in keyword:
    headers['referer'] = f'https://shopee.co.id/search?keyword={keyword}'

yield scrapy.Request(url=url, callback=self.parse, method='GET', headers=headers)

每次,当您的逻辑为真时,它都会根据您的需要修改头文件的referer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61400505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档