pyspider定时爬取的问题

发布于 2022-09-12 22:52:15 字数 3586 浏览 41 评论 0

多个爬虫出现该问题,爬取的是同一主站下的不用部分。
https://tophub.today/n/mproPp...
https://tophub.today/n/x9ozB4...

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2021-03-19 07:34:08
# Project: tophub_zhihu_1

from pyspider.libs.base_handler import *

"""
抓取今日热榜 知乎实时热点

{
    "date": 日期,
    "hotword": 热点话题,
    'rank': 热度,
    'hot': 热度排序,
    'user': 知乎用户,
    'url': 回答链接,
    'content': 回答内容,
}
"""
import datetime


class Handler(BaseHandler):
    # self.crawl方法的默认参数
    # ref: http://docs.pyspider.org/en/latest/apis/self.crawl/#handlercrawl_config
    crawl_config = {
        'user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:86.0) Gecko/20100101 Firefox/86.0',
        "headers": {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        },
        #"proxy":_proxy,
        "timeout" : 1000, #超时时间
        "itag": "v2.03"  # 爬虫版本--zhaoza:2.0版本,启动不爬取网页
    }

    @every(minutes=1440)  # 每天运行一次这个函数
    def on_start(self):
        url = 'https://tophub.today/n/mproPpoq6O'
        self.crawl(url, callback=self.list_detail)
    
    @config(age= 10 * 60 * 60)  # 页面10小时内不重复抓取-10 * 60 * 60
    def list_detail(self, response):
        table = response.doc('table').eq(0)  # 获取页面上的第一个table元素,也就是 "实时热点" table
        for rank, row in enumerate(table('tr').items(), 1):
            hotword = row('td.al').text()
            url = row('td.al a').attr.href
            hot = row('td').eq(2).text()

            # 爬取每一项,并把当前项的标题、排名、热度值传给下一页面 search_page
            self.crawl(url, callback=self.search_page, save=dict(hotword=hotword, rank=rank, hot=hot, url=url, page=0))

    @config(priority=2)
    def search_page(self, response):
        items = response.doc('div.List-item')
        for i in items.items():
            user = i('div.AuthorInfo .AuthorInfo-name a.UserLink-link').text()
            url = i('div.ContentItem>meta[itemprop="url"]').attr.content
            content = i('div.RichContent-inner').text()
            
            today = datetime.date.today()
            data = {
                "date": "%d%02d%02d" % (today.year, today.month, today.day),
                "hotword": response.save['hotword'],
                'rank': response.save['rank'],
                'hot': response.save['hot'],
                'user': user,
                'url': url,
                'content': content,
            }
            # 一般情况下,直接使用return,一个页面只能返回一条数据
            # 使用 send_message来在一个页面上返回多条数据
            # http://docs.pyspider.org/en/latest/apis/self.send_message/#selfsend_messageproject-msg-url
            self.send_message(self.project_name, data, url=url)  # 这里传入url是框架去重使用
            # print(data)


    def on_message(self, project, msg):
        return msg

爬虫效果:每日爬取对应网址列表内容。
问题描述:爬虫启动第一次爬取正常运行,定时每隔一天再次爬取,之后到定时时间时无法正常爬取。
到定时爬取时间时,active tasks中仅有下图内容
image.png
对应taskdb中记录如下图。
image.png
正常运行的爬虫taskdb中对应记录如下图。
image.png

鬼鬼,真的整不出来了。以前用的时候是正常的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文