Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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分页:当没有页码时,有没有办法用SCRAPY抓取网站?_Python_Html_Web Scraping_Scrapy_Web Crawler - Fatal编程技术网

Python SCRAPY分页:当没有页码时,有没有办法用SCRAPY抓取网站?

Python SCRAPY分页:当没有页码时,有没有办法用SCRAPY抓取网站?,python,html,web-scraping,scrapy,web-crawler,Python,Html,Web Scraping,Scrapy,Web Crawler,我正在做一个项目,用scrapy刮雅虎财经最活跃的股票(URL:) 目前,有152个股票在这和25个显示每页。通常,在我在网上找到的大多数场景中,如果一个网站需要分页,go-to方法是使用Xpath/CSS选择器在第一页的HTML中找到所需的页面数,然后循环。就我目前的网站而言,我面临以下情况: HTML中没有明确的“页数” 在页面底部,“下一页”和“上一页”按钮没有下一页的任何javascript或链接。我不是HTML方面的专家,所以我可能忽略了一些基本的东西(如果是这样,我提前道歉)。按钮的

我正在做一个项目,用scrapy刮雅虎财经最活跃的股票(URL:)

目前,有152个股票在这和25个显示每页。通常,在我在网上找到的大多数场景中,如果一个网站需要分页,go-to方法是使用Xpath/CSS选择器在第一页的HTML中找到所需的页面数,然后循环。就我目前的网站而言,我面临以下情况:

  • HTML中没有明确的“页数”
  • 在页面底部,“下一页”和“上一页”按钮没有下一页的任何javascript或链接。我不是HTML方面的专家,所以我可能忽略了一些基本的东西(如果是这样,我提前道歉)。按钮的HTML如下所示:

  • https://finance.yahoo.com/most-active?count=152


    只需在链接中使用参数
    count
    ,即可显示您想要显示的股票数量。

    https://finance.yahoo.com/most-active?count=152


    只需在链接中使用参数
    count
    ,即可显示您想要显示的股票数量。

    以下是我能够实现的功能: 对于字符串“1-25 of 152 results”,我将其拆分,得到152并将其转换为整数。然后我将152除以25,再加上1,得到所需的总页数。之后,我生成了一个25倍的列表,直到总页数(本例中为7页)。我绕了一圈,打了几个电话。代码如下:

    def get_stock_count(自我,响应):
    count=str(response.xpath('/*[@id=“fin scr res table”]/div[1]/div[1]/span[2]/span').css('::text').extract())
    总计结果=int(count.split()[-2])
    总偏移量=总结果//25+1
    偏移量列表=[i*25表示范围内的i(总偏移量)]
    对于偏移量列表中的偏移量:
    
    生成剪贴请求(url=f'https://finance.yahoo.com/most-active?count=25&offset={offset}',callback=self.load_pagination)
    以下是我能够实现的功能: 对于字符串“1-25 of 152 results”,我将其拆分,得到152并将其转换为整数。然后我将152除以25,再加上1,得到所需的总页数。之后,我生成了一个25倍的列表,直到总页数(本例中为7页)。我绕了一圈,打了几个电话。代码如下:

    def get_stock_count(自我,响应):
    count=str(response.xpath('/*[@id=“fin scr res table”]/div[1]/div[1]/span[2]/span').css('::text').extract())
    总计结果=int(count.split()[-2])
    总偏移量=总结果//25+1
    偏移量列表=[i*25表示范围内的i(总偏移量)]
    对于偏移量列表中的偏移量:
    
    生成剪贴请求(url=f'https://finance.yahoo.com/most-active?count=25&offset={offset}',callback=self.load_pagination)
    Hi,感谢您的回复。我忘了添加这一点,如果我使用带有计数的URL并运行爬行器,它不会爬行152,而只爬行25(这是默认设置),而如果我实际输入带有计数152的URL,它会加载所有内容。让我看看你的spiderHi鱼雷,谢谢你的评论,我能够找到解决方案,部分原因是这一点。我将发布解决方案,作为我将分享我的蜘蛛的帖子的答案。再次感谢您,谢谢您的回复。我忘了添加这一点,如果我使用带有计数的URL并运行爬行器,它不会爬行152,而只爬行25(这是默认设置),而如果我实际输入带有计数152的URL,它会加载所有内容。让我看看你的spiderHi鱼雷,谢谢你的评论,我能够找到解决方案,部分原因是这一点。我将发布解决方案作为我将分享我的蜘蛛的帖子的答案。再次感谢