V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Ewig
V2EX  ›  Python

关于用 scrapy 翻页问题

  •  
  •   Ewig · 2019-01-16 10:06:16 +08:00 · 2677 次点击
    这是一个创建于 2144 天前的主题,其中的信息可能已经有所发展或是发生改变。
    def get_page_content(self,response):
    next_page = response.xpath('//div[@class="page"]/a[contains(@ka,"page-next")]/@href').extract()
    print(response.url)
    linkList=response.xpath('//div[@class="sub-li"]/a[contains(@class,"company-info")]/@href').extract()
    linkList=[response.urljoin(link) for link in linkList]
    if linkList :
    for link in linkList:
    yield scrapy.Request(url=link,callback=self.final_parsre,dont_filter=True)

    next_page = response.xpath('//div[@class="page"]/a[contains(@ka,"page-next")]/@href').extract()
    print(next_page)
    if next_page is not None:
    next_page=response.urljoin(next_page[0])
    yield scrapy.Request(url=next_page,callback=self.get_page_content,dont_filter=True)

    https://www.zhipin.com/gongsi/_zzz_c101200100_iy100101_t801_s302/?page=1&ka=page-1

    这个网站翻页是通过点击 next page 不知道有多少页,因为我要点很多按钮 城市 融资,然后点入每个详情页 抓数据,现在不知道多少页,只能通过点击下一页找,如何写?
    14 条回复    2019-01-18 16:03:04 +08:00
    layorlayor
        1
    layorlayor  
       2019-01-16 10:18:13 +08:00
    if len(next_page) != 0: yield xxxx ???
    layorlayor
        2
    layorlayor  
       2019-01-16 10:21:33 +08:00
    用 class="next"貌似要好些,因为没有下一页就没这个标签了
    Ewig
        3
    Ewig  
    OP
       2019-01-16 10:58:32 +08:00
    @layorlayor https://www.zhipin.com/gongsi/_zzz_c101200100_iy100101_t801_s302/

    这个网站我先进入每个详情页,然后再翻页 进入详情页抓数据
    Ewig
        4
    Ewig  
    OP
       2019-01-16 10:58:41 +08:00
    这个不好处理
    xpresslink
        5
    xpresslink  
       2019-01-16 13:21:41 +08:00
    try: 获取下一页;yeild 下一页; except: pass
    largecat
        6
    largecat  
       2019-01-16 16:38:54 +08:00 via Android
    递归下一页。
    获取的数据返回在顶层打包丢给 pipeline
    Ewig
        7
    Ewig  
    OP
       2019-01-16 16:49:06 +08:00
    @xpresslink 为啥 try
    kr380709959
        8
    kr380709959  
       2019-01-16 16:54:21 +08:00
    我爬过拉钩的,类似也是分页的,我记得我是 page += 1,
    if item:
    break
    else:
    items.append(item)

    //item 是职位信息
    quere
        9
    quere  
       2019-01-16 17:07:48 +08:00
    scripy-redis 这个框架里面有一个自动去重的,可以用这个框架抓取
    xpresslink
        10
    xpresslink  
       2019-01-16 17:15:22 +08:00
    @Ewig 因为下页的 url 在最后一页肯定是获取不到或得到 None 的。yield 下一页的 Request 对象就会报错。scrapy 本身也有异常处理机制并不会影响其它 Request 对象执行,只是输出错误信息到日志里面。

    直接使用捕获异常,或是先检测再使用是两种哲学。
    python 和一些动态语言倾向使用第一种哲学
    houzhimeng
        11
    houzhimeng  
       2019-01-16 17:23:11 +08:00
    方法挺多,1.先爬列表页所有,判断有没有内容了,if not room_list :return,
    2.然后解析详情页。
    ls 那种方法去重也行,或者 CrawlSpider
    Ewig
        12
    Ewig  
    OP
       2019-01-18 15:03:08 +08:00
    @houzhimeng 这个页面你多少页都有内容啊,因为都是最后一页内容
    Ewig
        13
    Ewig  
    OP
       2019-01-18 15:54:37 +08:00
    @xpresslink 我那个写的有问题吗?
    Ewig
        14
    Ewig  
    OP
       2019-01-18 16:03:04 +08:00
    @quere 和去重啥关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3686 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:25 · PVG 18:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.