Python爬虫框架pyspider中如何抓取相同URL接口但参数不同的数据?

点击 run 之后只能看到这么一个 url, 而且参数是 json 格式时,貌似无法携带参数, 用 requests 却没有问题。
Python爬虫框架pyspider中如何抓取相同URL接口但参数不同的数据?

2 回复

在pyspider里抓相同URL不同参数的数据,直接在on_start里循环生成带参数的URL就行。比如你要抓分页数据,可以这样搞:

from pyspider import Spider, Request

class MySpider(Spider):
    
    def on_start(self):
        base_url = 'http://example.com/api/data'
        for page in range(1, 11):  # 假设抓10页
            params = {'page': page, 'size': 20}
            url = base_url + '?' + '&'.join([f'{k}={v}' for k, v in params.items()])
            self.crawl(url, callback=self.parse_page)
    
    def parse_page(self, response):
        # 解析每页数据的逻辑
        data = response.json
        for item in data.get('items', []):
            # 处理每个数据项
            yield item

如果参数是动态的或者需要从之前的响应里提取,就在回调函数里继续生成新请求。比如先抓列表页拿到ID,再拼详情页URL:

def parse_list(self, response):
    # 从列表页提取ID
    ids = response.doc('.item-id').text()
    for id in ids:
        detail_url = f'http://example.com/detail/{id}'
        self.crawl(detail_url, callback=self.parse_detail)

关键就是把参数拼到URL里,然后交给self.crawl去抓。用循环、列表推导式或者从之前响应提取都行。

总结:在on_start或回调函数里循环生成带参URL并调用self.crawl


url 后面加#,后面跟一个随机参数,我一般是加一个时间戳加一个 random 的随机数字

回到顶部