tutorial/items.py:项目的items文件
tutorial/pipelines.py:项目的pipelines文件,需要注册到setting.py中,会自动执行process_item方法
tutorial/settings.py:项目的设置文件
tutorial/spiders/:存储爬虫的目录,写好文件后,自动生效
目标:抓取cnblog的标题和新闻
1.新建立一个项目
执行
scrapy startproject cnblog
2.修改item.py,添加title、url、content字段
import scrapy
class CnblogItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
url = scrapy.Field()
title = scrapy.Field()
content = scrapy.Field()
pass
3.新建一个spider,抓取内容
from scrapy.spider import Spider
from scrapy.selector import Selector
import urllib.request
from scrapy.http import Request
from cnblog.items import CnblogItem
class CnSpider(Spider):
#爬虫的名称
name = "cnblog"
#允许爬的域名,防止爬偏了
allowed_domains = ["cnblogs.com","news.cnblogs.com"]
#设置起始的链接,获取全部翻页链接
start_urls = []
for pn in range(1,2):
url = 'https://news.cnblogs.com/n/page/%s/' % pn
start_urls.append(url)
#获取所有的内容页面链接
def parse(self, response):
sel = Selector(response)
news_list = sel.xpath('//h2[@class="news_entry"]')
for new_i in news_list:
new_link=new_i.xpath('a/@href').extract()
link_0=str("https://news.cnblogs.com"+new_link[0])
yield Request(link_0,callback=self.parse_item)
#抓取新闻详细页内容
def parse_item(self,response):
item = CnblogItem()
item['url'] = response.request.url
item['title'] = response.xpath('//div[@id="news_title"]/a/text()').extract()[0]
item['content'] = response.xpath('//div[@id="news_body"]').extract()[0]
yield item
4.定义pipelines,将内容保存到items.jl
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
from Util import FileUtil
class CnblogPipeline(object):
def __init__(self):
self.file = open('items.jl', 'w')
self.url_seen = set()
def process_item(self, item, spider):
#过滤下重复的数据
if item['url'] in self.url_seen:
raise DropItem("Duplicate item found: %s" % item)
else:
self.url_seen.add(item['url'])
line = json.dumps(dict(item)) + "\n"
self.file.write(line)
FileUtil.saveNews(item['url'],item['title'],item['content'])
return item
5.激活定义的pipelines
修改settings.py
ITEM_PIPELINES = {
'cnblog.pipelines.CnblogPipeline': 300,
}
6.FileUtil.py的代码
from urllib.request import quote
import urllib.request
import sqlite3
class FileUtil:
#根据url下载图片,如果没有设置图片地址,自动保存到D:\\download\\图片名称
def downImg(imgUrl,savePath=None):
imgName=imgUrl.split('/')[-1]
preUrl=imgUrl.replace(imgName,"")
if savePath is None:
savePath="D:\\download\\"+imgName
conn = urllib.request.urlopen(preUrl+quote(imgName))
f = open(savePath,'wb')
f.write(conn.read())
f.close()
print('Saved:'+savePath)
def saveNews(url,title=None,content=None):
if title is None:
title=""
if content is None:
content=""
conn = sqlite3.connect('news.db')
cursor = conn.cursor()
# 执行一条SQL语句,创建user表:
cursor.execute('create table IF NOT EXISTS news (id INTEGER PRIMARY KEY, url varchar(100),title vachar(100),content text)')
cursor.execute('select * from news where url=\''+url+'\'')
values=cursor.fetchall()
if len(values) > 0:#链接以前就存在
print('链接已经存在:'+url)
else:
cursor.execute('insert into news (url, title,content) values (\''+url+'\', \''+title+'\', \''+content+'\')')
print("save success."+url)
# 关闭Cursor:
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()
分享到:
相关推荐
scrapy爬取cnblog博客园文章列表保存到本地数据库。这个是本人最近学习爬虫的一个实践案例,源码解析详情请移步博文:https://blog.csdn.net/xiaocy66/article/details/83834261
scrapy抓取糗事百科热门
Scrapy练习项目,利用Scrapy抓取古诗(唐诗三百首,宋词三百首等),并保存为json格式
使用python scrapy抓取拉钩java招聘信息并制作成词云
利用Scrapy抓取读书网资源,并通过PipeLines异步存储到Mysql数据库中,附件中有建表语句,下载立刻就能运行
练习使用scrapy 框架爬取数据,爬取,解析,持久化,日志
基于Python和Echarts职位画像系统,使用Scrapy抓取职位招聘数据,使用Django+echarts完成数据可视化。 环境安装配置 建议直接安装anconda,然后git clone后进入项目目录,执行pip install -r requirements.txt ...
Scrapy 抓取 网易严选、小米有品产品数据.zip
scrapy抓取链家网二手房成交数据
基于Python和Echarts职位画像系统,用Scrapy抓取招聘数据,使用Django+echarts完成数据可视化
使用scrapy 抓取 google app store中的app信息写入mysql 代码可直接运行
通过django创建搜网网站,通过elasticsearch实现动态搜索scrapy抓取的数据.zip
通过Scrapy框架下载保存美女图片,进而学习下Spider中间件(Spider Middlewares)相关知识
通过Scrapy框架构建工程来实现关键字搜索和讯论坛正文后结果中所有的的帖子内容,发帖人,以及发帖的时间。
scrapy抓取数据存储至本地mysql数据库 基于python开发,采用scrapy,数据存储至本地数据库(或excel表格) 程序的主要目的是完成抓取和分析的任务同时学习爬虫相关知识,所以在细节处理上略有不足,但考虑到最终的...
使用python的爬虫框架scrapy抓取51job网站的招聘信息并存入文件 (DataSpider) 二、大数据存储 编写java脚本使用HDFS API把数据上传到HDFS文件系统 三、大数据处理 使用Hadoop处理大数据 (BigDataHandler) - 不懂运行...
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...
roll_news_scrapy使用scrapy抓取搜狐滚动新闻,保存到mongodb。##runscrapy crawl sohu_roll3
基于Python和Echarts职位画像系统,使用Scrapy抓取职位招聘数据,使用Django+echarts完成数据可视化。 基于Python和Echarts职位画像系统,使用Scrapy抓取职位招聘数据,使用Django+echarts完成数据可视化。 ...
源码下载 欢迎下载