如何通过Scrapy使用admin-ajax.php从网站上抓取数据

时间:2018-07-11 12:56:01

标签: php python ajax web-scraping scrapy

我正试图在该网站上刮刮有关unibet赌场的评论:https://casinoplacard.com/unibet-casino-reviews-and-bonuses/

就像我对其他评论来源所做的那样,我在Python上使用了Scrapy,通过以下代码刮取了评论:

class slotRunner_spyder(scrapy.Spider):
count=0

name = "slotRunner_spyder"
start_urls = [

       'https://casinoplacard.com/unibet-casino-reviews-and-bonuses/'
]
def parse(self, response):

    parsed_uri = urlparse(response.url)
    domain = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)

    for review in response.css('div.rwp-users-reviews > div.rwp-u-review') :
        self.count+=1
        yield {
            'name': review.css('td a::text').extract_first(),
            'date': review.css('td small::text').extract_first(),
            'review': review.css('div.rwp-u-review__content > div.rwp-u-review__comment').extract(),
            'url' : response.url
        }
    print(self.count)

但是对于该网站,它不起作用。为了更好地理解,我介绍了计数器(self.count)并发现它仅执行1次迭代,这是不正常的...

然后,我花了一些时间研究该网站的DevTools,发现页面加载后,会自动使用URL https://casinoplacard.com/wp-admin/admin-ajax.php

完成XHR POST请求方法

通过查看该请求,我找到了182条评论数据:

  
    
      

预览>>数据>>评论

    
  

那么你们能帮助我了解捕获这些数据的方式吗?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方法,我确信这不是最好的方法,但至少我做了我想做的事。

因此,正如我在“预览”标签中的问题中所说的那样,所有的数据我都需要。所以我要做的就是获取这些数据。为此,我了解到在加载URL时会自动发出XHR POST请求,因此我只是试图强制python请求该URL。

import requests
s = requests.Session()
# We get the URL into that session
s.get(url)
#Here is the imitation of the POST request 
self.r = s.post(ajax_URL,data=param,headers=headers)`

您只需从DevTool的标题选项卡中获取参数,然后表格数据就是您的参数。对于标题,您也可以在标题标签中找到它,然后搜索 用户代理,然后将所有内容粘贴到标题中。 Ajax URL是我在问题中写的URL。

希望对某人有帮助。