博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬取中华网科技新闻
阅读量:6424 次
发布时间:2019-06-23

本文共 2606 字,大约阅读时间需要 8 分钟。

爬取 

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

创建项目

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 item12 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

你可能感兴趣的文章
SAP QM Batch to Batch的转移过账事务中的Vendor Batch
查看>>
本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
查看>>
图解SSIS监视文件夹并自动导入数据
查看>>
Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
查看>>
MyBatis Review——开发Dao的方法
查看>>
技术研发国产化进程加快 看传感器企业如何展示十八般武艺
查看>>
技术助力第三次革命
查看>>
《HTML与CSS入门经典(第8版)》——2.6 总结
查看>>
新手指南:在 Ubuntu 和 Fedora 上安装软件包
查看>>
在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器
查看>>
大型网站的 HTTPS 实践(二):HTTPS 对性能的影响
查看>>
《Swift 权威指南》——第6章,第6.10节嵌套函数
查看>>
《自己动手做交互系统》——1.3 本章小结
查看>>
Mobile devices bundled with malware?
查看>>
《JavaScript面向对象精要》——1.5 访问属性
查看>>
《Python数据可视化编程实战》—— 第 1 章 准备工作环境
查看>>
Android应用性能优化最佳实践.1.1 Android Studio的优势
查看>>
《设计模式解析(第2版•修订版)》—第2章 2.2节什么是UML
查看>>
【直播】APP全量混淆和瘦身技术揭秘
查看>>
10个大坑,当你产品上架AppStore会遇到
查看>>