Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy未返回特定标记的结果_Python_Xpath_Web Scraping_Scrapy_Web Crawler - Fatal编程技术网

Python Scrapy未返回特定标记的结果

Python Scrapy未返回特定标记的结果,python,xpath,web-scraping,scrapy,web-crawler,Python,Xpath,Web Scraping,Scrapy,Web Crawler,我今天刚开始使用Scrapy,但我之前有javascript编程经验,请耐心等待,我将给出一个非常详细的解释: 我使用gramReport来分析一些instagram个人资料(提取关注者数量、帖子数量和其他数据),因为我有一个不同个人资料的列表,我想自动完成这项任务 最后的想法是这样的: 1. Use Scrapy to crawl a specific profile ( so append 'profile' to 'gramreport.com/user/' ) 2. Extract sp

我今天刚开始使用Scrapy,但我之前有javascript编程经验,请耐心等待,我将给出一个非常详细的解释:

我使用gramReport来分析一些instagram个人资料(提取关注者数量、帖子数量和其他数据),因为我有一个不同个人资料的列表,我想自动完成这项任务

最后的想法是这样的:

1. Use Scrapy to crawl a specific profile ( so append 'profile' to 'gramreport.com/user/' )
2. Extract specific data and save it in a csv
我认为python可以完成这项工作,开始搜索并找到了scrapy,文档对我来说非常完美。

我决定尝试一下,就像教程一样,我创建了一个蜘蛛:

import scrapy
class QuotesSpider(scrapy.Spider):
name = "profile"
start_urls = [
    'http://gramreport.com/user/cats.gato'
]

def parse(self, response):
    page = response.url.split("/")[-1]
    filename = 'profile-%s.html' % page
    with open(filename, 'wb') as f:
        f.write(response.body)
因此,
scrapy crawl profile
工作得非常好,我无法获得html页面。 接下来,我尝试使用shell:

scrapy shell 'http://gramreport.com/user/cats.gato'
很好,我可以通过Xpath或CSS获取一些数据:

//Followers:
response.xpath('/html/body/div[3]/table[1]/tr/td[2]/table/tr[1]/td/div/table/tr[2]/td/text()').extract()

//Posts:
response.xpath('/html/body/div[3]/table[1]/tr/td[2]/table/tr[3]/td/div/table/tr[2]/td/text()').extract()

//Page Name:
response.xpath('/html/body/div[3]/table[1]/tr/td[1]/div/div/div/span[2]/text()').extract()

//Average Likes:
response.xpath('/html/body/div[3]/div[1]/div/div/div[1]/div/text()').extract()

//Average Comments:
response.xpath('/html/body/div[3]/div[1]/div/div/div[2]/div/text()').extract()
我得到的大多数结果都有u'字符和其他正则表达式,如
[u'\n\t\t\t252124\t\t']
,但我认为已经有回复了

但是,有一些数据我无法提取,我只是没有得到任何结果

首先是
最近的交互
表,这是因为AJAX,但我不知道如何修复它;也许需要延期

其次,
顶级Hashtags
顶级用户提到的
表格


他们的XPath不工作,css选择器也不工作;我不明白为什么。

加载页面时,会发出一个AJAX请求

如果在加载页面时打开web inspector,您将看到如下AJAX请求:

如果在page source中按住ctrl+f组合键,则会看到一些javascript,如:

您可以使用scrapy查找此url并转发请求:

def parse(self, response):

    script = response.xpath("//script[contains(text(), 'getresultsb']")
    url = script.re('url:"(.+?)"')  # capture between ""
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest',
    }
    yield Request(url, 
        method='POST', 
        body='dmn=ok', 
        callback=self.parse_recent
        headers=headers,
    )

def parse_recent(self, response):
    # parse recent data here

页面加载时会发出AJAX请求

如果在加载页面时打开web inspector,您将看到如下AJAX请求:

如果在page source中按住ctrl+f组合键,则会看到一些javascript,如:

您可以使用scrapy查找此url并转发请求:

def parse(self, response):

    script = response.xpath("//script[contains(text(), 'getresultsb']")
    url = script.re('url:"(.+?)"')  # capture between ""
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest',
    }
    yield Request(url, 
        method='POST', 
        body='dmn=ok', 
        callback=self.parse_recent
        headers=headers,
    )

def parse_recent(self, response):
    # parse recent data here