我是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(
答案 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