Scrapy爬博客园

D:
进入D盘

scrapy startproject cnblogs
创建博客园项目

cd cnblogs
进入项目根目录

scrapy genspider blog cnblogs.com
创建爬虫文件

 

 

 

 

 

 

 

blog.py:

 

# -*- coding: utf-8 -*-
import scrapy


class BlogSpider(scrapy.Spider):
name = 'blog'
allowed_domains = ['cnblogs.com']
start_urls = ['https://www.cnblogs.com/']

def parse(self, response):
homePage = response.css('.post_item_body')
# 提取首页展示的正文,保存至变量homePage

for v in homePage:
# 循环获取每一条里面的标题与作者
titlelnk = v.css('.titlelnk::text').extract_first()
# 提取标题
lightblue = v.css('.lightblue::text').extract_first()
# 提取作者

"""
接下来进行写文件操作,每个作者的帖子储存在一个txt文档里面
"""
fileName = '%s-帖子.txt' % lightblue
# 定义文件名,如:作者-帖子.txt

with open(fileName, "a+") as f:
# 不同作者的标题保存在不同的txt文档,“a+”以追加的形式
f.write(titlelnk)
f.close()


scrapy crawl blog
运行爬虫

 

首页展示的20条博客的标题和作者:

 

爬取下一页:

 

blog.py:

 

# -*- coding: utf-8 -*-
import scrapy


class BlogSpider(scrapy.Spider):
name = 'blog'
allowed_domains = ['cnblogs.com']
start_urls = ['https://www.cnblogs.com/']

def parse(self, response):
homePage = response.css('.post_item_body')
# 提取首页展示的正文,保存至变量homePage

for v in homePage:
# 循环获取每一条里面的标题与作者
titlelnk = v.css('.titlelnk::text').extract_first()
# 提取标题
lightblue = v.css('.lightblue::text').extract_first()
# 提取作者

"""
接下来进行写文件操作,每条帖子的标题储存在一个txt文档里面
"""
fileName = '%s-帖子.txt' % lightblue
# 定义文件名,如:作者-帖子.txt

with open(fileName, "a+") as f:
# 不同作者的标题保存在不同的txt文档,“a+”以追加的形式
f.write(titlelnk)
f.close()

"""
接下来我们需要判断下一页是否存在,
如果存在,
我们需要继续提交给parse执行
关键看scrapy如何实现链接提交
"""
next_page = response.css('.pager a:contains("Next")::attr(href)').extract_first()
# css选择器提取下一页链接

if next_page is not None:
# 判断是否存在下一页
"""
如果是相对路径,如:/page/1
urljoin能把相对地址转换成绝对地址
最终next_page为:https://www.cnblogs.com/#p2
"""
next_page = response.urljoin(next_page)

"""
接下来就是爬取下一页或是内容页的秘诀所在:
scrapy给我们提供了这么一个方法:scrapy.Request()
这个方法还有许多参数,后面我们慢慢说,这里我们只使用了两个参数
一个是:我们继续爬取的链接(next_page),这里是下一页链接,当然也可以是内容页
另一个是:我们要把链接提交给哪一个函数(callback=self.parse)爬取,这里是parse函数,也就是本函数
当然,我们也可以在下面另写一个函数,比如:内容页,专门处理内容页的数据
经过这么一个函数,下一页链接又提交给了parse,那就可以不断的爬取了,直到不存在下一页
"""
yield scrapy.Request(next_page, callback=self.parse)

转载于:https://www.cnblogs.com/yjlch1016/p/9266065.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值