Python爬虫入门教程 40-100 博客园Python相关40W博客抓取 scrapy

简介: 爬前叨叨第40篇博客吹响号角,爬取博客园博客~本文最终抓取到了从2010年1月1日到2019年1月7日的37W+文章,后面可以分析好多东西了呢经常看博客的同志知道,博客园每个栏目下面有200页,多了的数据他就不显示了,最多显示4000篇博客如何尽可能多的得到博客数据,是这篇文章研究的一点点核心...

爬前叨叨

第40篇博客吹响号角,爬取博客园博客~本文最终抓取到了从2010年1月1日到2019年1月7日的37W+文章,后面可以分析好多东西了呢

经常看博客的同志知道,博客园每个栏目下面有200页,多了的数据他就不显示了,最多显示4000篇博客如何尽可能多的得到博客数据,是这篇文章研究的一点点核心内容,能√get到多少就看你的了~

image

单纯的从每个栏目去爬取是不显示的,转换一下思路,看到搜索页面,有时间~,有时间!
image

注意看URL链接

https://zzk.cnblogs.com/s/blogpost?Keywords=python&datetimerange=Customer&from=2019-01-01&to=2019-01-01  

这个链接得到之后,其实用一个比较简单的思路就可以获取到所有python相关的文章了,迭代时间。
下面编写核心代码,比较重要的几个点,我单独提炼出来。

  1. 页面搜索的时候因为加了验证,所以你必须要获取到你本地的cookie,这个你很容易得到
  2. 字典生成器的语法是时候去复习一下了
import scrapy
from scrapy import Request,Selector
import time
import datetime

class BlogsSpider(scrapy.Spider):
    name = 'Blogs'
    allowed_domains = ['zzk.cnblogs.com']
    start_urls = ['http://zzk.cnblogs.com/']
    from_time = "2010-01-01"
    end_time = "2010-01-01"
    keywords = "python"
    page =1
    url = "https://zzk.cnblogs.com/s/blogpost?Keywords={keywords}&datetimerange=Customer&from={from_time}&to={end_time}&pageindex={page}"
    custom_settings = {
        "DEFAULT_REQUEST_HEADERS":{
            "HOST":"zzk.cnblogs.com",
            "TE":"Trailers",
            "referer": "https://zzk.cnblogs.com/s/blogpost?w=python",
            "upgrade-insecure-requests": "1",
            "user-agent": "Mozilla/5.0 Gecko/20100101 Firefox/64.0"

        }
    }


    def start_requests(self):
        cookie_str = "想办法自己获取到"
        self.cookies = {item.split("=")[0]: item.split("=")[1] for item in cookie_str.split("; ")}
        yield Request(self.url.format(keywords=self.keywords,from_time=self.from_time,end_time=self.end_time,page=self.page),cookies=self.cookies,callback=self.parse)

页面爬取完毕之后,需要进行解析,获取翻页页码,同时将时间+1天,下面的代码重点看时间叠加部分的操作。

    def parse(self, response):
        print("正在爬取",response.url)
        count = int(response.css('#CountOfResults::text').extract_first()) # 获取是否有数据
        if count>0:
            for page in range(1,int(count/10)+2):
                # 抓取详细数据
                yield Request(self.url.format(keywords=self.keywords,from_time=self.from_time,end_time=self.end_time,page=page),cookies=self.cookies,callback=self.parse_detail,dont_filter=True)

        time.sleep(2)
        # 跳转下一个日期
        d = datetime.datetime.strptime(self.from_time, '%Y-%m-%d')
        delta = datetime.timedelta(days=1)
        d = d + delta
        self.from_time = d.strftime('%Y-%m-%d')
        self.end_time =self.from_time
        yield Request(
            self.url.format(keywords=self.keywords, from_time=self.from_time, end_time=self.end_time, page=self.page),
            cookies=self.cookies, callback=self.parse, dont_filter=True)

页面解析入库

本部分操作逻辑没有复杂点,只需要按照流程编写即可,运行代码,跑起来,在mongodb等待一些时间

db.getCollection('dict').count({}) 

返回

372352条数据

    def parse_detail(self,response):
        items = response.xpath('//div[@class="searchItem"]')
        for item in items:
            title = item.xpath('h3[@class="searchItemTitle"]/a//text()').extract()
            title = "".join(title)

            author = item.xpath(".//span[@class='searchItemInfo-userName']/a/text()").extract_first()
            public_date = item.xpath(".//span[@class='searchItemInfo-publishDate']/text()").extract_first()
            pv = item.xpath(".//span[@class='searchItemInfo-views']/text()").extract_first()
            if pv:
                pv = pv[3:-1]
            url = item.xpath(".//span[@class='searchURL']/text()").extract_first()
            #print(title,author,public_date,pv)
            yield {
                "title":title,
                "author":author,
                "public_date":public_date,
                "pv":pv,
                "url":url
            }

数据入库

一顿操作猛如虎,数据就到手了~后面可以做一些简单的数据分析,那篇博客再见啦@

相关文章
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
785 6
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1730 31
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
646 66
|
数据采集 XML 存储
Headers池技术在Python爬虫反反爬中的应用
Headers池技术在Python爬虫反反爬中的应用
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
845 4
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
数据采集 JavaScript 前端开发
JavaScript逆向爬虫——使用Python模拟执行JavaScript
JavaScript逆向爬虫——使用Python模拟执行JavaScript
862 2
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
303 6

推荐镜像

更多