什么是网络爬虫?

网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本

爬虫流程

  1. 先由urllib的request打开Url得到网页html文档
  2. 浏览器打开网页源代码分析元素节点
  3. 通过Beautiful Soup或者正则表达式提取想要的数据
  4. 存储数据到本地磁盘或数据库(抓取,分析,存储)

简单实例

爬取17K小说网(https://www.17k.com/)中的一部小说《斩月》

获取章节内容

先看代码:

import requests
if __name__ == '__main__':target = 'https://www.17k.com/chapter/3062292/39084147.html'req = requests.get(target)req.encoding = req.apparent_encodinghtml = req.textprint(html)

通过urllib的request打开Url得到网页html文档,apparent_encoding 属性是通过解析得到网页的编码方式,并且赋值给requests.encoding,就能保证打印出来的不是乱码格式的网页html文档。

不过有时候apparent_encoding属性解析出来的是它所认为正确的编码格式,但是和原编码格式不一致,最终导致乱码问题。因此可以现在网页端知道网页编码格式,再通过requests.encoding直接赋值进行转码。就不会出现乱码,如 requests.encoding=‘utf-8’

通过此方法得到网页文档,找到文章内容所对应的div:

再通过 BeautifulSoup 提取想要的内容:

from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':target = 'https://www.17k.com/chapter/3062292/39084147.html'req = requests.get(target)req.encoding = req.apparent_encodinghtml = req.textbf = BeautifulSoup(html)texts = bf.find_all('div',class_='p')print(texts[0].text)

texts[0].text通过text属性将<p>标签隐去,只打印<p>标签包含的内容,得到结果如下:

获取章节标题和链接

在章节页面中只能获取章节内容,不能获取每章的章节链接,因此我们需要回到小说的目录页面上进行信息获取。方法也和上述获取章节内容一致,先通过requests获取网页文档,再通过BeautifulSoup提取想要的内容。

from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':www = 'https://www.17k.com'target = 'https://www.17k.com/list/3062292.html'req = requests.get(target)req.encoding = req.apparent_encodinghtml = req.textbf = BeautifulSoup(html)texts = bf.find_all('dl',class_='Volume')a_bf = BeautifulSoup(str(texts[0]))a_text = a_bf.find_all('a')print(a_text[0].text)



但是我们发现章节标题被包在了<span>标签下,这就意味着提取出来的内容即使通过.text属性转变后,<span>标签和标签中的内容也会一起打印出来。
那么此时就可以通过截取字符的形式将标题截取出来:

from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':www = 'https://www.17k.com'target = 'https://www.17k.com/list/3062292.html'req = requests.get(target)req.encoding = req.apparent_encodinghtml = req.textbf = BeautifulSoup(html)texts = bf.find_all('dl',class_='Volume')a_bf = BeautifulSoup(str(texts[0]))a_text = a_bf.find_all('a')for each in a_text[2:]:  # 去掉第一个不需要的链接name = str(each.find_all('span',class_='ellipsis'))href = each.get('href')print(name[43:len(name)-24], www+href)

得到如下结果

整合

上面已经学会了获取章节内容和章节标题、链接,接下来就是下载整部小说了,直接上代码,逻辑就是上述的逻辑,加了点函数包装而已。

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests, sys"""
类说明:下载17K小说网中的小说《斩月》
"""
class download(object):def __init__(self):self.server = 'https://www.17k.com'self.target = 'https://www.17k.com/list/3062292.html'self.names = []  # 存放章节名self.urls = []   # 存放章节链接self.nums = 0    # 章节数"""函数说明:获取下载链接"""def get_download_url(self):req = requests.get(url=self.target)req.encoding = 'utf-8'html = req.textbf = BeautifulSoup(html)div = bf.find_all('dl',class_='Volume')a_bf = BeautifulSoup(str(div[0]))a = a_bf.find_all('a')self.nums = len(a[1:])  # 去取一些不必要的链接,并统计章节数for each in a[1:]:name = str(each.find_all('span', class_='ellipsis')) # 获取章节名字href = each.get('href') # 获取章节链接self.names.append(name[43:len(name) - 24])self.urls.append(self.server + href)"""函数说明:获取章节内容Parameters:target - 下载链接(String)Returns:texts - 章节内容(String)"""def get_contents(self, target):req = requests.get(url=target)req.encoding = 'utf-8'html = req.textbf = BeautifulSoup(html)texts = bf.find_all('div',class_='p')texts = texts[0].textreturn texts[:len(texts)-90]"""函数说明:将爬取的文章内容写入文件Parameters:name - 章节名称(String)path - 当前路径下,小说保存名称(String)text - 章节内容(String)"""def write(self,name,path,text):write_flag = Truewith open(path, 'a', encoding='utf-8') as f:f.write(name + '\n')f.writelines(text)f.write('\n\n')if __name__ == "__main__":download = download()download.get_download_url()print("《斩月》开始下载:")for i in range(download.nums):download.write(download.names[i], "斩月.txt", download.get_contents(download.urls[i]))sys.stdout.write("  已下载:%.3f%%" %float(i/download.nums) + '\r')sys.stdout.flush()print("《斩月》下载完成!")




大功告成!

python爬虫简单实例-爬取17K小说网小说相关推荐

  1. Python爬虫 scrapy框架爬取某招聘网存入mongodb解析

    这篇文章主要介绍了Python爬虫 scrapy框架爬取某招聘网存入mongodb解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 sc ...

  2. Python爬虫——使用正则表达式爬取一本喜欢的小说

    使用正则表达式爬取一本喜欢的小说 这个爬虫的案例是对正则表达式的运用,通过这个案例,我们可以对正则表达式有更深入的了解. 1. 信息来源: 努努书坊.爬取的小说:三国演义.链接为:https://ww ...

  3. Python爬虫:正则表达式爬取校花网

    #正则表达式爬取校花网 # 网址 url = 'http://www.xiaohuar.com' #分页爬取大学校花图片共16页640张美图 1.导入模块 import requests import ...

  4. Python 爬虫复习之爬取笔趣阁小说网站(不用正则)

    前言 小说网站-笔趣阁:URL:https://www.qu.la/ 笔趣阁是一个盗版小说网站,这里有很多起点中文网的小说,该网站小说的更新速度稍滞后于起点中文网正版小说的更新速度.并且该网站只支持在 ...

  5. 爬虫简单实例-爬取拼多多商品信息

    接口 https://youhui.pinduoduo.com/goods/goods-detail?goodsId=商品信息ID 思路 通过遍历商品信息ID来获取商品的信息, 1 ~ 9999999 ...

  6. 基于Requests的Python爬虫入门实例------爬取豆瓣图书排行榜的前25本图书(小白福利)

    话不多说,先上代码: # -*- coding:utf-8 -*- import sys import requests import lxml from bs4 import BeautifulSo ...

  7. Python爬虫入门:爬取某个网页的小说内容

    导入必要的包 import requests import re 要爬的网页 url = 'http://www.shujy.com/5200/244309/' 模拟浏览器发送http请求 respo ...

  8. Python爬虫简单运用爬取代理IP

    功能1: 爬取西拉ip代理官网上的代理ip 环境:python3.8+pycharm 库:requests,lxml 浏览器:谷歌 IP地址:http://www.xiladaili.com/gaon ...

  9. python爬虫实战之爬取中国农药网

    前言:这算是和研究生老师第一次正式的进行项目,虽说开始的有点随便,但是第二战还是挺成功的!自己作为一个本科生,也很幸运可以跟着学点知识,随便帮自己学院的老师出点力.还记得第一次交接任务时是和陈瑞学长, ...

最新文章

  1. 各种函数调用约定及浮点数传参
  2. r语言electricity数据集_R语言学习10-查看数据
  3. PHP 实现一个可用的redis 事务锁, 解决并发问题
  4. Linux统计某个文件夹下的文件个数、目录个数
  5. I2C和SPI异同及使用注意
  6. centos部署python个人博客项目
  7. JAVA消息服务JMS规范及原理详解
  8. 【BIM入门实战】Revit入门基础知识选择题带答案解析(116题)
  9. HBase BlockCache系列 - 探求BlockCache实现机制
  10. cups支持的打印机列表_在Mac上怎样更新打印机软件?
  11. linux 挂载windows共享目录 is not a valid block device
  12. linux虚拟环境tmux,关于在Linux系统中如何把tmux和vim打造成IDE的讲解
  13. Java 常用修饰符总结
  14. 广西(柳州)创建国家级车联网先导区建设方案
  15. ArcGIS教程:按值的范围进行重分类
  16. 浅聊||高速PCB过孔设计需要注意这些问题
  17. P3717 [AHOI2017初中组]cover——洛谷(差分)
  18. Mybatis复杂查询(详细举例)
  19. python span()函数_Python正则表达式六种函数实例讲解
  20. 用wait¬ify实现多线程才是正确打开方式

热门文章

  1. [教学] [PCEVA超频宝典之CPU进阶篇]AM3平台超频教程
  2. 英特尔 NUC 豆子峡谷 安装ubantu 的总结
  3. 如何计算某年某月有多少天?
  4. 软件测试的基本理论-移动端app测试-6
  5. 《黑天鹅》black swan 高清迅雷下载 DVD BD高清中英双字
  6. 数学与计算机学院文化节,我院成功举办第二届数学文化节暨计算科学文化交流月活动...
  7. Treasure Island(简单图论题)
  8. Ubuntu 15.10 安装 小米/360 2代等随身WIFI驱动
  9. Hybrid APP 混合开发经验总结《三》
  10. 客户案例|AI如何助力快消行业降本增效