zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    [转]VS 2008 新特性一览
    [转]WCF开发框架形成之旅WCF的几种寄宿方式
    [转]失业的程序员(五):商战之前
    [ 转]Android折叠列表 ExpandableList
    [转]extjs入门——开始
    [转]Jquery操作select
    Ext JS 下载 及 是否收费
    [转]WCF服务的批量寄宿
    [转]Android高手进阶教程(十七)之Android中Intent传递对象的两种方法(Serializable,Parcelable)!
    mat之三PermGen Metaspace永久代内存分析
  • 原文地址:https://www.cnblogs.com/yjlch1016/p/9266065.html
Copyright © 2011-2022 走看看