Python爬取网页所有小说

python 2.7.15
练习beautifulsoup的使用
不了解bs的可以先看一下这个bs文档

一、看URL的规律

因为是要爬取网页上所有的小说,所以不仅要获取网页的URL,还要获取网页里的连接们的URL。它们一般是有规律的,如果没有的话就用正则或bs抓一个列表出来遍历。

我找了一个东野圭吾作品集的网站,网址如下:

然后是作品列表,点击图片或名字都可以进入这个小说的网页
好了,上源码

这是列表里第一本小说《家信》的相关信息,它存在一个class为common的a标签里,其中的href属性的值就是这本小说的URL


我们要获取所有小说的这个值,代码如下

url ="http://www.shunong.com/author/311/"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent': user_agent}
request = urllib2.Request(url, headers=headers)
response = urllib2.urlopen(request)
content = response.read()
soup = BeautifulSoup(content,'html.parser')
a = soup.find_all("a" ,  class_="common")
n = 1
for b in a :if n%2==0:add = b.get('href').encode('utf-8')name = b.get_text().encode('utf-8')print namebook(add, name)n+=1

这个if是因为源码里同样的信息出现了两遍,去一个就行
列表里遍历出来的值后面一定要加一个encode,因为bs对象都是Unicode,写到文档里就成乱码了
这样就获得了这个网页上的所有小说的网址了,这个book函数就是对书名及其网址的操作

二、爬取章节

还是找URL的规律以《家信》为例

这是源代码里全部的章节及其网址
这一部分就是 刚才的book函数,这里我用的正则

def book(add, name):url = "http://www.shunong.com" + addprint urluser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers = {'User-Agent': user_agent}request = urllib2.Request(url, headers=headers)response = urllib2.urlopen(request)content = response.read()pattern = re.compile('<li><a href="(.*?)" title=".*?</a></li>')items = re.findall(pattern, content)

获取之后循环遍历执行下一个章节函数,同时打开一个文本文档准备存这一本小说

    n = 0f = open(name.decode('utf-8') + '.txt', 'a')for item in items:if n>4:books = itemd =chapter(books)print d#f.writelines(d)n+=1f.close()

三、爬取内容

得到章节的网址后就可以爬取章节里的内容了
还是先看源码

章节名在h1标签里,章节内容在p标签里,但是源码里的p标签不止一个,这就需要我们筛选。先打印所有p标签,每打印一个,就输出一些符号,便于观察,打印出来后看正文是第几个标签,这里是第二个。

 soup = BeautifulSoup(content,'html.parser')a = soup.find('h1')b = soup.find_all('p')a = a.get_text(strip=True)a = a.encode('utf-8')d = a + '\n'c = b[1].get_text(strip=True).encode('utf-8')d = d + cd = d + '\n'return d

获取到内容后return,递给上一个函数,写入文档。

四、完整代码

# coding=utf-8
from bs4 import BeautifulSoup
import urllib2
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')def chapter(books):url = "http://www.shunong.com" + booksprint urluser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers = {'User-Agent': user_agent}request = urllib2.Request(url, headers=headers)response = urllib2.urlopen(request)content = response.read()soup = BeautifulSoup(content,'html.parser')a = soup.find('h1')b = soup.find_all('p')a = a.get_text(strip=True)a = a.encode('utf-8')d = a + '\n'c = b[1].get_text(strip=True).encode('utf-8')d = d + cd = d + '\n'return ddef book(add, name):url = "http://www.shunong.com" + addprint urluser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers = {'User-Agent': user_agent}request = urllib2.Request(url, headers=headers)response = urllib2.urlopen(request)content = response.read()pattern = re.compile('<li><a href="(.*?)" title=".*?</a></li>')items = re.findall(pattern, content)n = 0f = open(name.decode('utf-8') + '.txt', 'a')for item in items:if n>4:books = itemd =chapter(books)print df.writelines(d)n+=1f.close()url ="http://www.shunong.com/author/311/"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent': user_agent}
request = urllib2.Request(url, headers=headers)
response = urllib2.urlopen(request)
content = response.read()
soup = BeautifulSoup(content,'html.parser')
a = soup.find_all("a" ,  class_="common")
n = 1
for b in a :if n%2==0:add = b.get('href').encode('utf-8')name = b.get_text().encode('utf-8')print namebook(add, name)n+=1

Python爬取网页所有小说相关推荐

  1. 使用 requests+lxml 库的 Python 爬虫实例(以爬取网页连载小说《撒野》为例)

    需求目标 介绍使用 requests 库与 lxml 库进行简单的网页数据爬取普通框架与爬虫实例,本文以爬取网页连载小说<撒野>为例~ 当然有很多小说基本都能找到现成的 .txt 或者 . ...

  2. 如何用 Python 爬取网页制作电子书

    本文来自作者 孙亖 在 GitChat 上分享 「如何用 Python 爬取网页制作电子书」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 0 前言 有人爬取数据分析黄金周旅游景点,有人爬 ...

  3. Python 爬取起点的小说(非vip)

                      Python 爬取起点的小说(非vip) 起点小说网是一个小说种类比较全面的网站,当然,作为收费类网站,VIP类的小说也很多,章节是VIP的话,有一个动态加载,也就 ...

  4. python爬取网站教学视频_零基础Python爬取网页文章和图片详细教学(内附源码、教学视频)...

    Python爬虫,这个我相信对于很多人来说都不陌生! 今天小编给大家提供一份零基础Python爬取网页图片以及小说的代码并且详细的和大家讲解一下! 开发环境:版本Python3.6.2!(2版本会在2 ...

  5. python爬取图片-Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...

  6. python爬取网页公开数据_如何用Python爬取网页数据

    使用Python爬取网页数据的方法: 一.利用webbrowser.open()打开一个网站:>>> import webbrowser >>> webbrowse ...

  7. 编程python爬取网页数据教程_实例讲解Python爬取网页数据

    一.利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('http://i.f ...

  8. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)

    python爬取网页版QQ空间,生成词云图.柱状图.折线图 最近python课程学完了,琢磨着用python点什么东西,经过一番搜索,盯上了QQ空间,拿走不谢,欢迎点赞收藏,记得github给个sta ...

  9. python爬虫教程:实例讲解Python爬取网页数据

    这篇文章给大家通过实例讲解了Python爬取网页数据的步骤以及操作过程,有兴趣的朋友跟着学习下吧. 一.利用webbrowser.open()打开一个网站: >>> import w ...

最新文章

  1. Python3中装饰器介绍
  2. 我作为Java后端,分享一下入门Spark编程的经历!
  3. MIT人工突触芯片新突破:指甲大小的芯片有望媲美超算
  4. go标准库的学习-crypto/sha1
  5. 合成孔径雷达技术——概述
  6. 再见,2014;你好2015
  7. 在运行时在Spring Cloud Config中刷新属性配置
  8. VSCode 设置 Tab 空格
  9. php返回json数组元素,php生成返回json对象数组(json支持中文)
  10. nginx post请求超时_nginx的重试机制以及nginx常用的超时配置说明
  11. 我的管理实践---《人件》读后感
  12. 运维面试和笔试常见问题
  13. Flixel横板游戏制作教程(六)—SoundsandMusic(音效与音乐)
  14. 如何保持session一致性?
  15. Lucas–Kanade(LK)光流算法详解
  16. 武汉大学计算机系就业方向如何,武汉大学有什么王牌专业?它们的就业在哪些方向?...
  17. DMP数据处理之统一用户识别
  18. Android输入事件从读取到分发三:InputDispatcherThread线程分发事件的过程
  19. iPhone尺寸大全(包含iPhone14系列)
  20. 考勤系统怎样登录服务器,ZKtime5.0考勤管理系统标准版客户端登录忘记登录密码...

热门文章

  1. Vitalik 关于密码经济学的演讲PPT
  2. 《辞职目录》——【离职的感言,离别并不意味着告别,总有一些人和情感难以割舍】
  3. 罗湖致力打造智慧城市标杆区
  4. 考研特辑 | 祝你研值满满,金榜题名!
  5. 十四、此次泡沫形成和破裂的原因
  6. java 与BO集成
  7. 后缀是lnk是什么文件_ink文件是什么文件?与lnk文件只差一个字母,却有天壤之别!...
  8. lol服务器4月2日维修公告,lol维护公告最新
  9. ZZULIOJ-1109: 数根(函数专题)(Java)
  10. 广东工业大学第12届ACM程序设计大赛 Problem D: 只有通过毁灭才能揭示真理