2017-09-27 70 views
1
# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.http import Request 

class InfoSpider(scrapy.Spider): 

    name = 'info' 
    allowed_domains = ['womenonlyconnected.com'] 
    start_urls =['http://www.womenonlyconnected.com/socialengine/pageitems/index'] 

    def parse(self, response): 
     urls = response.xpath('//h3/a/@href').extract() 
     for url in urls: 
      absolute_url = response.urljoin(url) 
      yield Request(absolute_url , callback = self.parse_page) 



    def parse_page(self , response): 
     pass 

这里用我的代码,这个代码我可以凑仅前24个链接只需要在“查看更多”后刮所有环节帮助的 页PAG网址是bbelow http://www.womenonlyconnected.com/socialengine/pageitems/indexScrapy:刮网页上的“下一个”结果使用scrapy

回答

0

给出调查的点点可以发现之后,您可以使用此URL进行分页:

http://www.womenonlyconnected.com/socialengine/pageitems/index?page=N 

其中ň从1开始的第一页等等。所以,我会修改你的蜘蛛像这样:

# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.http import Request 

class InfoSpider(scrapy.Spider): 

    name = 'info' 
    allowed_domains = ['womenonlyconnected.com'] 
    start_urls = ['http://www.womenonlyconnected.com/socialengine/pageitems/index'] 
    page_num = 1 

    def parse(self, response): 
     urls = response.xpath('//h3/a/@href').extract() 
     for url in urls: 
      absolute_url = response.urljoin(url) 
      yield Request(absolute_url , callback = self.parse_page) 

     if self.page_num < 100: 
      self.page_num += 1 
      yield Request(start_urls[0] + '?page={}'.format(self.page_num) , callback = self.parse) 

    def parse_page(self , response): 
     pass 

的原因,我停在100页,这不是那么容易,以确定是否有更多的结果,因此,如果你应该去到下一个页面。理论上,您可以检查页面上是否存在查看更多元素。问题是它总是存在的,如果没有更多页面带有结果,它就会隐藏。但隐藏这个元素发生在JavaScript中,所以Scrapy总是看到它是隐藏的。为了可靠地判断是否有更多页面,你必须使用例如Splash

+0

@TomášLinhart,我也检查过该网站。这是最后一页'http://www.womenonlyconnected.com/socialengine/pageitems/index?page = 47'。 – SIM

+0

@Shahin这不是真正通用的解决方案,因为添加文章时页面的数量可能随时间而变化。真正通用的解决方案涉及使用(无头)浏览器来呈现页面,例如,溅。 –