当前位置: 首页 > news >正文

爬取中华网科技新闻

爬取 http://tech.china.com/articles/

抓取新闻列表中所有分页的新闻详情,包括标题、正文、时间、来源等信息。

创建项目
scrapy startproject China

 

scrapy genspider -t crawl chinatech 

items.py

 1 from scrapy import Field, Item
 2 
 3 
 4 class ChinaItem(Item):
 5     # define the fields for your item here like:
 6     # name = scrapy.Field()
 7 
 8     title = Field()
 9     text = Field()
10     datetime = Field()
11     source = Field()
12     url = Field()
13     website = Field()

 

chinatech.py

 1 import scrapy
 2 from scrapy.linkextractors import LinkExtractor
 3 from scrapy.spiders import CrawlSpider, Rule
 4 from China.items import *
 5 from China.loaders import *
 6 
 7 class ChinatechSpider(CrawlSpider):
 8     name = 'chinatech'
 9     allowed_domains = ['tech.china.com']
10     start_urls = ['http://tech.china.com/articles/']
11 
12     rules = (
13         Rule(LinkExtractor(allow='article\/.*\.html', restrict_xpaths='//div[@id="left_side"]//div[@class="con_item"]'),
14              callback='parse_item'),
15         Rule(LinkExtractor(restrict_xpaths='//div[@id="pageStyle"]//a[contains(., "下一页")]'))
16     )
17 
18     def parse_item(self, response):
19         loader = ChinaLoader(item=ChinaItem(), response=response)
20         loader.add_xpath('title', '//h1[@id="chan_newsTitle"]/text()')
21         loader.add_value('url', response.url)
22         loader.add_xpath('text', '//div[@id="chan_newsDetail"]//text()')
23         loader.add_xpath('datetime', '//div[@id="chan_newsInfo"]/text()', re='(\d+-\d+-\d+\s\d+:\d+:\d+)')
24         loader.add_xpath('source', '//div[@id="chan_newsInfo"]/text()', re='来源:(.*)')
25         loader.add_value('website', '中华网')
26         yield loader.load_item()

 

loads.py

 1 from scrapy.loader import ItemLoader
 2 from scrapy.loader.processors import TakeFirst, Join, Compose
 3 
 4 
 5 class NewsLoader(ItemLoader):
 6     default_output_processor = TakeFirst()
 7 
 8 
 9 class ChinaLoader(NewsLoader):
10     text_out = Compose(Join(), lambda s: s.strip())
11     source_out = Compose(Join(), lambda s: s.strip())

 

pipelines.py

 1 import json
 2 
 3 class ChinaPipeline(object):
 4 
 5     def __init__(self):
 6         self.filename = open("china.json", "w")
 7 
 8     def process_item(self, item, spider):
 9         text = json.dumps(dict(item), ensure_ascii = False) + ",\n"
10         self.filename.write(text)
11         return item
12 
13     def close_spider(self, spider):
14         self.filename.close()

 

settings.py


 1 BOT_NAME = 'China'
 2 
 3 SPIDER_MODULES = ['China.spiders']
 4 NEWSPIDER_MODULE = 'China.spiders'
 5 
 6 ROBOTSTXT_OBEY = False
 7 
 8 ITEM_PIPELINES = {
 9     'China.pipelines.ChinaPipeline': 300,
10 }

 

转载于:https://www.cnblogs.com/wanglinjie/p/9240854.html

相关文章:

  • 初学者比较容易犯的布局错误(手风琴布局)
  • Linux操作系统加固
  • 对 preferred-value 的理解
  • CMB面试准备-基础
  • 添加到web.config文件里的用户自定义翻页控件
  • [置顶] Web开发工具
  • php实现 称砝码(背包)
  • Debian samba支持域用户登录
  • Centos7命令行下安装和配置Apache服务器
  • linux命令截取文件最后n行(所有命令)
  • python-模块与包
  • Java进阶02 异常处理
  • Kerberos+LDAP+NFSv4 实现单点登录
  • mysql 常用函数
  • SystemCenter2012SP1实践(5)SCVMM管理HyperV
  • Android单元测试 - 几个重要问题
  • CODING 缺陷管理功能正式开始公测
  • CSS 专业技巧
  • Docker下部署自己的LNMP工作环境
  • eclipse的离线汉化
  • Git 使用集
  • HomeBrew常规使用教程
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Linux Process Manage
  • React中的“虫洞”——Context
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Sublime text 3 3103 注册码
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue-cli3搭建项目
  • 浮动相关
  • 高性能JavaScript阅读简记(三)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 少走弯路,给Java 1~5 年程序员的建议
  • 数据科学 第 3 章 11 字符串处理
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习使用ExpressJS 4.0中的新Router
  • 一个SAP顾问在美国的这些年
  • 由插件封装引出的一丢丢思考
  • 智能合约开发环境搭建及Hello World合约
  • kubernetes资源对象--ingress
  • 第二十章:异步和文件I/O.(二十三)
  • 湖北分布式智能数据采集方法有哪些?
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #13 yum、编译安装与sed命令的使用
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)EXC_BREAKPOINT僵尸错误
  • ***通过什么方式***网吧
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**