文档章节

scrapy 爬取纵横网实战

o
 osc_isezqdgg
发布于 2019/09/18 15:22
字数 839
阅读 13
收藏 0

精选30+云产品,助力企业轻松上云!>>>

前言

闲来无事就要练练代码,不知道最近爬取什么网站好,就拿纵横网爬取我最喜欢的雪中悍刀行练手吧

准备

  • python3
  • scrapy

项目创建:

cmd命令行切换到工作目录创建scrapy项目  两条命令 scarpy startproject与scrapy genspider    然后用pycharm打开项目

D:\pythonwork>scrapy startproject zongheng
New Scrapy project 'zongheng', using template directory 'c:\users\11573\appdata\local\programs\python\python36\lib\site-packages\scrapy\templates\project', created in:
    D:\pythonwork\zongheng

You can start your first spider with:
    cd zongheng
    scrapy genspider example example.com

D:\pythonwork>cd zongheng

D:\pythonwork\zongheng>cd zongheng

D:\pythonwork\zongheng\zongheng>scrapy genspider xuezhong http://book.zongheng.com/chapter/189169/3431546.html
Created spider 'xuezhong' using template 'basic' in module:
  zongheng.spiders.xuezhong

确定内容

首先打开网页看下我们需要爬取的内容

其实小说的话结构比较简单 只有三大块  卷 章节 内容

因此 items.py代码:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class ZonghengItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    book = scrapy.Field()
    section = scrapy.Field()
    content = scrapy.Field()
    pass

内容提取spider文件编写

还是我们先创建一个main.py文件方便我们测试代码

from scrapy import cmdline
cmdline.execute('scrapy crawl xuezhong'.split())

然后我们可以在spider文件中先编写

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


class XuezhongSpider(scrapy.Spider):
    name = 'xuezhong'
    allowed_domains = ['http://book.zongheng.com/chapter/189169/3431546.html']
    start_urls = ['http://book.zongheng.com/chapter/189169/3431546.html/']

    def parse(self, response):
        print(response.text)
        pass

运行main.py看看有没有输出

发现直接整个网页的内容都可以爬取下来,说明该网页基本没有反爬机制,甚至不用我们去修改user-agent那么就直接开始吧

打开网页 F12查看元素位置 并编写xpath路径 然后编写spider文件

需要注意的是我们要对小说内容进行一定量的数据清洗,因为包含某些html标签我们需要去除

# -*- coding: utf-8 -*-
import scrapy
import re
from zongheng.items import ZonghengItem


class XuezhongSpider(scrapy.Spider):
    name = 'xuezhong'
    allowed_domains = ['book.zongheng.com']
    start_urls = ['http://book.zongheng.com/chapter/189169/3431546.html/']

    def parse(self, response):
        xuezhong_item = ZonghengItem()
        xuezhong_item['book'] = response.xpath('//*[@id="reader_warp"]/div[2]/text()[4]').get()[3:]
        xuezhong_item['section'] = response.xpath('//*[@id="readerFt"]/div/div[2]/div[2]/text()').get()

        content = response.xpath('//*[@id="readerFt"]/div/div[5]').get()
        #content内容需要处理因为会显示<p></p>标签和<div>标签
        content = re.sub(r'</p>', "", content)
        content = re.sub(r'<p>|<div.*>|</div>',"\n",content )

        xuezhong_item['content'] = content
        yield xuezhong_item

        nextlink = response.xpath('//*[@id="readerFt"]/div/div[7]/a[3]/@href').get()
        print(nextlink)
        if nextlink:
            yield scrapy.Request(nextlink,callback=self.parse)

有时候我们会发现无法进入下个链接,那可能是被allowed_domains过滤掉了 我们修改下就可以

唉 突然发现了到第一卷的一百多章后就要VIP了 那我们就先只弄一百多章吧 不过也可以去其他网站爬取免费的 这次我们就先爬取一百多章吧


 

内容保存

接下来就是内容的保存了,这次就直接保存为本地txt文件就行了 

首先去settings.py文件里开启  ITEM_PIPELINES

然后编写pipelines.py文件

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


class ZonghengPipeline(object):
    def process_item(self, item, spider):
        filename = item['book']+item['section']+'.txt'
        with open("../xuezhongtxt/"+filename,'w') as txtf:
            txtf.write(item['content'])
        return item

由于选址失误导致了我们只能爬取免费的一百多章节,尴尬,不过我们可以类比运用到其他网站爬取全文免费的书籍

怎么样 使用scrapy爬取是不是很方便呢

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
7个Python爬虫实战项目教程

有很多小伙伴在开始学习Python的时候,都特别期待能用Python写一个爬虫脚本,实验楼上有不少python爬虫的课程,这里总结几个实战项目,如果你想学习Python爬虫的话,可以挑选感兴趣的学习哦;...

实验楼
2017/12/05
0
0
不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据?新手必学

Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让...

程序员的人生A
04/25
0
0
爬虫整理

一.爬虫原则 爬虫的盗亦有道Robots协议 二.爬虫页面获取基础 Requests库概念 深入requests库params|data|json参数 requeests模块请求常用参数的写法整理 requeests模块响应体属性和方法重新整...

osc_jtynr6ek
2019/05/14
4
0
不踩坑的Python爬虫:如何彩票源码 下载在一个月内学会爬取大规模数据

Python爬虫为什么受欢迎 如果彩票源码 下载【大神源码论坛】dsluntan.com 【布丁源码论坛】budingbbs.com 企娥3393756370 你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互...

ds17138784582
2018/07/21
213
0
爬虫系列的总结

图片来自 unsplash 时光荏苒,四个月时间如流沙般从手心中流逝。这四个月自己算是收获颇多。因为在张哥的影响下,自己渐渐喜欢上写作。自己将所学的爬虫知识、学习心得以及如何学习分享出来。...

猴哥Yuri
2017/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阻塞锁,非阻塞锁,自旋锁,互斥锁

1.阻塞锁 多个线程同时调用同一个方法的时候,所有线程都被排队处理了。让线程进入阻塞状态进行等待,当获得相应的信号(唤醒,时间) 时,才可以进入线程的准备就绪状态,准备就绪状态的所有...

osc_umiwij2c
23分钟前
5
0
Asp.NetCore3.1 WebApi中模型验证

前言   不管是前端,还是后端,做数据合法性验证是避免不了的,这边文章就记录一下Asp.NetCore3.1 WebApi中的模型验证; 传统写法--不使用模型验证   来,先上图:   我相信,应该绝大...

osc_qgfjs4a5
24分钟前
24
0
龙芯开源社区上线.NET主页

龙芯团队从2019年7 月份开始着手.NET Core的MIPS64支持研发,经过将近一年的研发,在2020年6月18日完成了里程碑性的工作,在github CoreCLR 仓库:https://github.com/gsvm/coreclr, 随后受...

osc_bj12kvua
25分钟前
11
0
高并发下浏览量入库设计

一、背景 文章浏览量统计,low的做法是:用户每次浏览,前端会发送一个GET请求获取一篇文章详情时,会把这篇文章的浏览量+1,存进数据库里。 1.1 这么做,有几个问题: 在GET请求的业务逻辑里...

osc_uj3h5gt9
26分钟前
27
0
nginx timeout 配置 全局timeout 局部timeout web timeout

nginx比较强大,可以针对单个域名请求做出单个连接超时的配置. 比如些动态解释和静态解释可以根据业务的需求配置 proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响应超时时间...

osc_5cok9i01
27分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部