参考代码:爬取政府招标信息
政府招标
思路:爬虫文件开启时本地记录相关爬取信息,下次开启时判断本地记录的信息,跳过已记录的相关内容爬取

def get_erveday():begin_date = datetime.date(2021,4,1).strftime("%Y-%m-%d")date_list = []begin_date = datetime.datetime.strptime(begin_date, "%Y-%m-%d")end_date = datetime.date(2021,4,17).strftime("%Y-%m-%d")# end_date = datetime.datetime.strptime(time.strftime(datetime.datetime.now().strftime("%Y-%m-%d")), "%Y-%m-%d")end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d")while begin_date <= end_date:date_str = begin_date.strftime("%Y-%m-%d")date_list.append(date_str)begin_date += datetime.timedelta(days=1)return date_list

在爬虫文件上写上这都代码,生成一个时间段列表,爬取该时间段内的所有内容。

def get_over_data():with open("data.txt", "r", encoding="utf-8") as ft:result = ft.read()return result

从本地读取记录信息,生成结果做条件判断

爬取一段内容作一次记录

具体思路就是这样的,更好的办法是结合redis数据库,当然还有其他思路,欢迎交流!
完整代码:

import scrapy
import json
from urllib import parse
from bs4 import BeautifulSoup
import copy
HEA = {"Content-Type":"application/json"}
data_dict = {"采购公告": 'ZcyAnnouncement1', "结果公告": "ZcyAnnouncement2", "合同公告": "ZcyAnnouncement3","更正公告": "ZcyAnnouncement4", "招标文件预公示": "ZcyAnnouncement5", "单一来源": "ZcyAnnouncement6","电子卖场公告": 'ZcyAnnouncement7', "其他公告": "ZcyAnnouncement9"}
data = {"categoryCode": "", "pageSize": "15", "pageNo": 1, "publishDateBegin": "","publishDateEnd": ""}
site = "www.ccgp-guangxi.gov.cn"
import datetime
import time
def get_erveday():begin_date = datetime.date(2021,4,1).strftime("%Y-%m-%d")date_list = []begin_date = datetime.datetime.strptime(begin_date, "%Y-%m-%d")end_date = datetime.date(2021,4,17).strftime("%Y-%m-%d")# end_date = datetime.datetime.strptime(time.strftime(datetime.datetime.now().strftime("%Y-%m-%d")), "%Y-%m-%d")end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d")while begin_date <= end_date:date_str = begin_date.strftime("%Y-%m-%d")date_list.append(date_str)begin_date += datetime.timedelta(days=1)return date_list
def get_over_data():with open("data.txt", "r", encoding="utf-8") as ft:result = ft.read()return result
class CcgpGuangxiSearchSpider(scrapy.Spider):name = 'guangxi'allowed_domains = ['www.ccgp-guangxi.gov.cn']start_urls = ["http://www.ccgp-guangxi.gov.cn/front/search/category"]def __init__(self, goon=None,*args, **kwargs):super(CcgpGuangxiSearchSpider, self).__init__(*args, **kwargs)# self.baseUrl = "http://www.ccgp-guangxi.gov.cn/front/search/all"self.goon = goonself.baseDase = get_erveday()def start_requests(self):item = {}item["page"] = 1for i in self.baseDase:item["over"] = iif i in get_over_data():continue# next_day = datetime.datetime.strptime(i, "%Y-%m-%d") + datetime.timedelta(days=1)for k, v in data_dict.items():item["subclass"] = kitem['site'] = sitedata["categoryCode"] = vdata["publishDateBegin"] = idata["publishDateEnd"] = i #next_day.strftime("%Y-%m-%d")item["data"] = datayield scrapy.Request(url=self.start_urls[0],method="POST",headers=HEA,body=json.dumps(item["data"]),callback=self.parse,meta=copy.deepcopy(item),)def parse(self, response):item = response.metaresults = response.json()['hits']['hits']# 无内容则退出if not results:with open("data.txt", "a") as f:f.write(item["over"])return None# 页面内容数量item["page_size"] = len(results)for result in results:item['page_url'] = parse.urljoin(response.url, result["_source"]['url'])item['title'] = result["_source"]['title']issue_time = int(result["_source"]['publishDate'] / 1000)item["issue_time"] = time.strftime("%Y-%m-%d", time.localtime(issue_time))# 获取文本和附件yield scrapy.Request(method="GET",dont_filter=True,url=item['page_url'],callback=self.parse_content,meta=item,)# 翻页item["page"] += 1item["data"]["pageNo"] = item["page"]# 页面内容少于pageSize则退出if item["page_size"] < int(data["pageSize"]) and self.goon == "no":return Noneyield scrapy.Request(url=self.start_urls[0],method="POST",headers=HEA,body=json.dumps(item["data"]),callback=self.parse,meta=item,dont_filter=True,)def parse_content(self, response):item = response.metaresult = response.xpath('//div[@class="guangxi-detail js-comp"]/input/@value').extract_first()contend = json.loads(result)["content"]item["content"] = contenditem["download_url"] = []# 处理附件信息if "附件" in result:# 获取内容XMLbeautfulHTML = BeautifulSoup(item["content"], 'lxml')fujian_url = beautfulHTML.select('div[class="file"] ul li a')if not fujian_url:fujian_url = beautfulHTML.select('ul[class="fjxx"] li a')flie_dict = {}# 多个附件for url in fujian_url:download_url = url.get("href")name = url.textflie_dict[name] = download_urlitem["download_url"] = [flie_dict]yield item

声明:此内容仅为学习交流使用,不能作商业用途,如需提取相关信息请告知并说明用途,否则一切后果与本人无关。

scrapy 解决中途中断爬取问题相关推荐

  1. 2021年scrapy一分钟内爬取笔趣阁整本小说存为txt|解决章节排序问题

    本人是一个小说迷,喜欢用电纸书看小说,但苦于难以寻找网络小说的txt版本,加之最近学习了一下怎么用scrapy爬取网页数据,所以想到去使用scrapy框架来爬取笔趣阁小说存为txt文件,在爬取过程中对 ...

  2. python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取

    python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...

  3. Scrapy框架+Gerapy分布式爬取海外网文章

    Scrapy框架+Gerapy分布式爬取海外网文章 前言 一.Scrapy和Gerapy是什么? 1.Scrapy概述 2.Scrapy五大基本构成: 3.建立爬虫项目整体架构图 4.Gerapy概述 ...

  4. Python爬虫实战使用scrapy与selenium来爬取数据

    系列文章目录 实战使用scrapy与selenium来爬取数据 文章目录 系列文章目录 前言 一.前期准备 二.思路与运行程序 1.思路 2.运行程序 三.代码 1.代码下载 2.部分代码 总结 前言 ...

  5. scrapy mysql 豆瓣_Scrapy爬取豆瓣图书保存MySQL实验

    一.任务描述 本实验任务主要对Scrapy爬取进行一些基本操作,通过完成本实验任务,要求学生熟练掌握数据爬取保存MySQL的操作,并对数据保存至MySQL的基本操作进行整理并填写工作任务报告. 二.任 ...

  6. 使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站

    使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站 本次测试案例参考厦门大学数据库实验室 链接: https://dblab.xmu.edu.cn/blog/3937/ 在PyCharm中新建 ...

  7. 使用python的scrapy框架简单的爬取豆瓣读书top250

    使用python的scrapy框架简单的爬取豆瓣读书top250 一.配置scrapy环境 1. 配置相应模块 如果没有配置过scrapy环境的一般需要安装lxml.PyOpenssl.Twisted ...

  8. 【依葫芦画葫芦】の Scrapy Dou鱼封面爬取 笔记

    [依葫芦画葫芦]の Scrapy Dou鱼封面爬取 创建项目 scrapy startproject douyu scrapy genspider douyua www.douyu.com 创建项目后 ...

  9. Scrapy的使用(1) -- 爬取b站新番排行榜

    Scrapy的使用(1) – 爬取b站新番排行榜 scrapy框架笔记(1),参考官方文档与部分教程,完成一个简单的爬虫程序,爬取了b站的2021年1月新番数据 1. 创建项目 在需要存储的代码目录下 ...

最新文章

  1. 【BZOJ 3879】SvT
  2. mac 中登陆mysql忘记密码解决办法
  3. ES6学习笔记--let和const
  4. gradle 构建完成自动删除_Gradle 6.6 RC6 发布,引入配置缓存特性,大幅提升构建性能
  5. 世界上第一个程序员竟然是女性,难以置信......
  6. web前端模块化开发_真正的模块化Web应用程序:为什么没有开发标准?
  7. 心情再差,也还是要拿起我的 JavaScript 实战重点代码
  8. 为什么很多人选择前端而不选择Java?
  9. opencv提供的带参数例程
  10. cuda cudnn 下载地址
  11. Windows10+Caffe+CUDA7.5+VS2013环境配置
  12. 怎么用C语言程序表白,c语言表白代码 用C语言表白.doc
  13. DCDC基础(10)-- BUCK电路的CCM和DCM模式
  14. css 实现一个尖角_请用CSS实现一个带尖角的正方形
  15. 自己定义微信图文模板注意事项整理
  16. 无法打开csproj,因为此版本的应用程序不支持其项目类型 csproj
  17. 统计公司员工喜欢吃的水果,并打印出最喜欢吃的前K中水果【map关联式容器,k/V结构】
  18. 关于如何清除百度全家桶的一些经验
  19. hive数据备份方案
  20. 在写一篇关于elance odesk的

热门文章

  1. CentOS 7.6 FFMPEG安装指北
  2. C语言,自己当年编写的苹果(黑白)棋源程序代码
  3. linux oracle lrm00109,Oracle:ORA-01078与LRM-00109报错
  4. 考试用计算机检讨书,大学生计算机考试不及格检讨书
  5. linux服务器中学习使用FFmpeg命令overlay滤镜用法
  6. c语言排序5个成绩,成绩排序 (C语言代码)
  7. 蚂蚁金服阳振坤:OceanBase如何跨越关系数据库的“死亡之谷”
  8. Java六大设计模式原则(一)
  9. 支付宝蜻蜓VS微信青蛙,大佬为何抢分刷脸支付这杯羹
  10. 新鲜出炉的8月前端面试题