全站爬取cnblogs

全站爬取cnblogs

  • 创建
"""
# 1 scrapy startproject cnblogs_crawl
# 2 scrapy genspider cnblogs www.cnblogs.com
"""
  • 代码演示
"""
# -*- coding: utf-8 -*-
import scrapy
from cnblogs_crawl.items import CnblogsCrawlItem
from scrapy.http import Request

class CnblogsSpider(scrapy.Spider):
    name = ‘cnblogs‘
    allowed_domains = [‘www.cnblogs.com‘]
    start_urls = [‘http://www.cnblogs.com/‘]

    def parse(self, response):
        # print(response)
        div_list = response.css(‘.post_item‘)
        for div in div_list:
            item = CnblogsCrawlItem()
            title = div.css(‘h3>a::text‘).extract_first()
            # print(title)
            item[‘title‘] = title
            url = div.css(‘h3>a::attr(href)‘).extract_first()
            # print(url)
            item[‘url‘] = url
            author = div.css(‘.post_item_foot a::text‘).extract_first()
            # print(author)
            item[‘author‘] = author
            desc = div.css(‘.post_item_summary::text‘).extract()[-1]
            # print(desc)
            item[‘desc‘] = desc

            # yield item
            # 如果不写callback,爬完之后,就会执行parse_detail解析

            # 传参
            yield Request(url, callback=self.parse_detail, meta={‘item‘:item})

            # 持久化

        next = response.css(‘div.pager a:last-child::attr(href)‘).extract_first()
        # print(next)

        # 继续爬取下一页内容
        yield Request(‘http://www.cnblogs.com/‘ + next)

    # 继续获取文章的真正的内容,因为解析方式可能不一样
    def parse_detail(self, response):
        # print(response)
        item = response.meta.get(‘item‘)
        content = response.css(‘#cnblogs_post_body‘).extract_first()
        if not content:
            content = response.css(‘content‘).extract_first()
        item[‘content‘] = content
        yield item

"""
  • 鼠标执行
"""
from scrapy.cmdline import execute

execute([‘scrapy‘, ‘crawl‘, ‘cnblogs‘])
"""
  • 爬取数据持久化到数据库
"""
import pymysql

# 写入数据,持久化
class CnblogsCrawlPipeline(object):

    def open_spider(self, spider):
        self.conn = pymysql.Connect(host=‘127.0.0.1‘, port=3306, db=‘cnblogs‘, user=‘root‘, password=‘123456‘)

    def process_item(self, item, spider):
        curser = self.conn.cursor()
        sql = ‘‘‘insert into article (title, url, `desc`, content, author) values (%s, %s, %s, %s, %s)‘‘‘
        curser.execute(sql, args=(item[‘title‘], item[‘url‘], item[‘desc‘], item[‘content‘], item[‘author‘]))
        self.conn.commit()

    def close_spider(self, spider):
        self.conn.close()
"""

原文地址:https://www.cnblogs.com/yafeng666/p/12687899.html

时间: 2024-07-29 10:48:12

全站爬取cnblogs的相关文章

爬虫5 scrapy框架2 全站爬取cnblogs, scarpy请求传参, 提高爬取效率, 下载中间件, 集成selenium, fake-useragent, 去重源码分析, 布隆过滤器, 分布式爬虫, java等语言概念补充, bilibili爬视频参考

1 全站爬取cnblogs # 1 scrapy startproject cnblogs_crawl # 2 scrapy genspider cnblogs www.cnblogs.com 示例: # cnblogs_crawl/cnblogs_crawl/spiders/cnblogs.py import scrapy from cnblogs_crawl.items import CnblogsCrawlItem from scrapy.http import Request class

爬虫 + 数据分析 - 7 CrawlSpider(全站爬取), 分布式, 增量式爬虫

一.全站爬取(CrawlSpider) 1.基本概念 作用:就是用于进行全站数据的爬取 - CrawlSpider就是Spider的一个子类 - 如何新建一个基于CrawlSpider的爬虫文件 - scrapy genspider -t crawl xxx www.xxx.com - LinkExtractor连接提取器:根据指定规则(正则)进行连接的提取 - Rule规则解析器:将链接提取器提取到的链接进行请求发送,然后对获取的页面数据进行 指定规则(callback)的解析 - 一个链接提

爬虫 --- 07. 全站爬取, post请求,cookie, 传参,中间件,selenium

一.全站数据的爬取 - yield scrapy.Request(url,callback):callback回调一个函数用于数据解析 # 爬取阳光热线前五页数据 import scrapy from sunLinePro.items import SunlineproItem class SunSpider(scrapy.Spider): name = 'sun' # allowed_domains = ['www.xxx.com'] start_urls = ['http://wz.sun0

【Scrapy框架之CrawlSpider全站爬取】--2019-08-06 15:17:42

原创链接: http://106.13.73.98/__/144/ 起 提问: 如果想要快速爬取网站的全站数据,有几种实现方法? 基于Scrapy框架中 Spider 的递归爬取来实现(Request模块递归回调parse方法) 基于 CrawlSpider 的自动爬取来实现(更加高效简洁) ???????CrawlSpider 是 Spider 的一个子类,除了继承了 Spider 的特性和功能外,还派生了其自己独有的更加强大的特性和功能.其中最为显著的功能就是 LinkExtractors:

【Scrapy框架之CrawlSpider全站爬取】 𓄛

原文: http://blog.gqylpy.com/gqy/369 起 提问: 如果想要快速爬取网站的全站数据,有几种实现方法? 基于Scrapy框架中 Spider 的递归爬取来实现(Request模块递归回调parse方法) 基于 CrawlSpider 的自动爬取来实现(更加高效简洁) ???????CrawlSpider 是 Spider 的一个子类,除了继承了 Spider 的特性和功能外,还派生了其自己独有的更加强大的特性和功能.其中最为显著的功能就是 LinkExtractors

某鱼直播数据全站爬取

前言 本次爬取使用了代理IP,爬取全站为1个小时,当然也可以不用代理proxy,但是要设置爬取速度 time.sleep(5) 先附上完整代码,下面有详解 import csv from fake_useragent import UserAgent import json from lxml import etree import requests # 代理服务器 proxyHost = "http-dyn.abuyun.com" proxyPort = "9020&quo

简书全站爬取 mysql异步保存

# 简书网 # 数据保存在mysql中; 将selenium+chromedriver集成到scrapy; 整个网站数据爬取 # 抓取ajax数据 #爬虫文件 # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from jianshu_spider.items import Articl

多线程爬取笔趣阁免费小说全站爬取

import threading,os,time,requests,pymongo,refrom queue import Queuefrom lxml import etreefrom bs4 import BeautifulSoup as BPclient = pymongo.MongoClient(host='localhost',port=27017)mg = client['biquge']def get_fenlei(): """ 爬取图书全部分类 :return

基于scrapy中---全站爬取数据----CrawlSpider的使用

#数据源:糗事百科 爬虫代码: 1 import scrapy 2 from scrapy.linkextractors import LinkExtractor 3 from scrapy.spiders import CrawlSpider, Rule 4 5 6 class QiubaiSpider(CrawlSpider): 7 name = 'qiubai' 8 # allowed_domains = ['www.xxx.com'] 9 start_urls = ['https://w