Scrapy的新手-如何抓取整个网站

时间:2019-09-14 06:11:49

标签: web-scraping scrapy

我是Scrapy的新手。目前,我正在尝试抓取以下网站:https://blogabet.com/tipsters

您可以在下面找到我的当前代码。但是,从网站上可以看到,每次访问时,它只会加载前10个条目。我想抓取所有用户名和用户网址。

到目前为止,我调查的是该页面发送了一个新请求,以加载接下来的10个条目。

https://blogabet.com/tipsters/?f[language]=all&f[pickType]=all&f[sport]=all&f[sportPercent]=&f[leagues]=all&f[picksOver]=0&f[lastActive]=12&f[bookiesUsed]=null&f[bookiePercent]=&f[order]=followers&f[start]=10

我的问题是:如何创建一个抓取所有用户名和网站的循环?

import scrapy
from scrapy import Request
from scrapy.http import Request
from aufgehts.items import AufgehtsItem

class BlogmeSpider(scrapy.Spider):
    name = 'blogme'


    def start_requests(self):

        url = "https://blogabet.com/tipsters/?f[language]=all&f[pickType]=all&f[sport]=all&f[sportPercent]=&f[leagues]=all&f[picksOver]=0&f[lastActive]=12&f[bookiesUsed]=null&f[bookiePercent]=&f[order]=followers&f[start]=0"

        headers={
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.9,pl;q=0.8,de;q=0.7',
            'Connection': 'keep-alive',
            'Host': 'blogabet.com',
            'Referer': 'https://blogabet.com/tipsters',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
        }

        yield scrapy.http.Request(url, headers=headers)



    def parse(self, response):

        listenings = response.xpath('//*[@class="tipster-info col-lg-10 no-padding"]')

        for listening in listenings:
            username = listening.xpath('.//h3[@class="name-t u-db u-mb1"]/strong/text()').extract_first()
            link = listening.xpath('.//*[@class="e-mail u-db u-mb1 text-ellipsis"]/a/@href').extract_first()
            #registered = listening.xpath('.//[@class="col-sh-4 col-xs-2 col-lg-2 no-padding"]')

            yield {'Username': username,
                  'Link': link}

        next_page = response
            if next_page is not None:
                next_page = response.urljoin(

1 个答案:

答案 0 :(得分:1)

我检查了您尝试执行分页的网站。 URL中有[开始]属性。如果检查多个请求,您会发现在每次迭代中它都会增加10。在这里,您可以创建一个循环,其中将10递增到现有数字,然后启动请求。您可以使用from w3lib.url import add_or_replace_parameters库,并通过在每次迭代中将其递增10来更改参数。您可以使用response.url更改现有的from scrapy.spiders import Request并通过它创建一个请求。

剩下的问题是循环应该在哪里结束?我没有解决这个问题,而是留给了你。祝你好运! Check this image to understand the parameter that changes