刚开始学习爬虫,按照网上的一个项目实战的视频学会了爬取一个网站的图片,然后就想着把自己之前看的《凡人修仙传》(以前手机的读书APP是可以免费看的,现在要收费,但是电脑上的网页是可以看的)爬取一下。

遇到的问题

看完视屏觉得可以直接套用代码来爬取,结果发现视频中的代码只能够爬取静态页面,对于动态加载的页面没有办法爬取。网上找了下方法,对于动态网页有两种方式,一种是逆向分析协议包找到脚本请求的网址,然后直接用代码来请求;另一种是使用selenium模块来模拟浏览器的行为,然后抓取数据。
两种方法分析:第一种是速度最快的,但是对于我这种小白来说有一定的难度,所以就放弃了;选择使用第二种方法。

代码完成的整个步骤

1、安装ChromeDriver和selenium模块

百度了一些方法,最后选择了一个博客的方法,链接找不到了,那就简单描述一下:

  1. 查看自己chrome的版本,到chromedriver下载地址上面找到对应的版本下载就可以。这里以我自己的浏览器为例,我的chrome是80.0.3987.122版本,但是网站上就只有如下的版本,当时比较困惑不知道要选择哪一个下载,后面再google的官方网站了解到只要是大版本号对应就可以。
    我选择了上面的一个下载(因为点进去查看notes的时候发现上面的一个的更新日期比较新)。
  2. 将chromedriver.exe放到chrome.exe的目录下,然后环境变量中的系统路径添加这个路径;
  3. 使用pycharm安装selenium模块,from selenium import webdriver driver = webdriver.Chrome()这两句来进行测试,我的报错,然后就重启了一下电脑就OK了;

2、代码讲解

代码我直接全部写在了main里面了,
1、获得所有章节的网页地址

def getHtml(http_url):
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}
response = requests.get(http_url,headers = header)
return response.textdef main():
#获取所有章节的地址
novel_url = "https://www.booktxt.net/1_1562"#
content = getHtml(novel_url)
pattern = re.compile(r'"5(.*?).html"')#正则匹配
novel_num = pattern.findall(content)
novel_url_list = [novel_url+"/5"+element for element in novel_num]

2、设置chrome为headless模式(不显示界面)

#设置无头浏览
chrome_options = Options()
chrome_options.add_argument('--headless')#只打开一个浏览器(不需要放到循环里面)
driver = webdriver.Chrome(chrome_options = chrome_options)

3、遍历每一章的网址,抓取内容并保存

count = 1              #计数,放到保存的每一章的文件前面,方便排序
for url in novel_url_list:driver.get(url)#打开网页content_text = driver.find_element_by_id("content").text       #使用id属性抓取本章的内容head = driver.find_element_by_xpath("//div[@class = 'bookname']/h1").text     #使用xpath格式抓取章节名称#保存内容到文件dir_path = "./凡人修仙"if not os.path.exists(dir_path):os.makedirs(dir_path)head = re.sub('[\/:*?"<>|]', '', head)# 去掉章节名中的非法字符,因为要以这个名字作为txt文件的名称fileName = dir_path+"/"+str(count)+head+".txt"file = open(fileName,"w",encoding="utf-8")file.write(content_text)file.close()print("当前下载章章数为:%d"%count)   #输出信息,方便查看# print("网址为%s"%url)count +=1

4、最后的效果图

3、完整代码

import os
import re
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsdef getHtml(http_url):header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}response = requests.get(http_url,headers = header)return response.textdef main():#获取一章的页面地址数据novel_url = "https://www.booktxt.net/1_1562"content = getHtml(novel_url)pattern = re.compile(r'"5(.*?).html"')#正则匹配novel_num = pattern.findall(content)novel_url_list = [novel_url+"/5"+element for element in novel_num]# print(novel_url_list)#设置无头浏览chrome_options = Options()chrome_options.add_argument('--headless')#打开一个浏览器driver = webdriver.Chrome(chrome_options = chrome_options)count = 1for url in novel_url_list:#获取一页的内容driver.get(url)try:content_text = driver.find_element_by_id("content").texthead = driver.find_element_by_xpath("//div[@class = 'bookname']/h1").text#print(head)except Exception:head = "第"+str(count)+"无此章节"content_text = ""pass#保存内容到文件dir_path = "./凡人修仙"if not os.path.exists(dir_path):os.makedirs(dir_path)head = re.sub('[\/:*?"<>|]', '', head)# 去掉非法字符fileName = dir_path+"/"+str(count)+head+".txt"file = open(fileName,"w",encoding="utf-8")file.write(content_text)file.close()print("当前下载章章数为:%d"%count)print("网址为%s"%url)count +=1returnif __name__ == '__main__':main()

python + selenium + chrome 凡人修仙小说爬取相关推荐

  1. python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫

    这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...

  2. Python爬虫入门教程02:小说爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文 01.python爬虫入门教程01:豆瓣Top电影爬取 基本开发环境 Python 3 ...

  3. Python+Selenium模拟淘宝滑块并爬取商品数据

    注:如果侵犯了Alibaba的权益,请联系我删除. 上一篇博客已经完成了模拟淘宝登陆,本节主要记录如何爬取淘宝商品列表页数据,同时如何模拟人的操作完成滑块的验证. 代码如下: #encoding=ut ...

  4. Python+selenium+firefox模拟登录微博并爬取数据(1

    1:环境python3.5,最新 firefox,selenium-3.14.0. 本来准备用无界面的,但是感觉效果不好看出来所以先用有界面的浏览器来做.分几次来慢慢写.这节先配置好环境. 2:安装: ...

  5. python晋江爬虫_python爬虫之小说爬取

    废话不多说,直接进入正题. 今天我要爬取的网站是起点中文网,内容是一部小说. 首先是引入库 from urllib.request importurlopenfrom bs4 import Beaut ...

  6. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

  7. python+selenium+chrome实现淘宝购物车秒杀自动结算

    python+selenium+chrome实现淘宝购物车秒杀自动结算 一.所需环境 二.安装 三.代码 最后run()一把就ok了!! 之前总是想要买aj,但是淘宝店铺每次发售手动抢的时候一般都会被 ...

  8. Python爬虫--笔趣阁小说爬取

    Python爬虫–笔趣阁小说爬取 爬虫用到的插件 import requests from lxml import etree 小说目录页 以小说"我有百万技能点"为例,在笔趣阁搜 ...

  9. Python + Selenium + Chrome Driver 自动化点击+评论+刷弹幕(仅供学习)

    Python + Selenium + Chrome Driver 自动化点击 评论 刷弹幕 首先说明,这篇博文仅供学习!仅供学习!仅供学习! 不要拿去做其他事,封号概不负责!!! 突发奇想 首先先说 ...

  10. Python网络爬虫(九):爬取顶点小说网站全部小说,并存入MongoDB

    前言:本篇博客将爬取顶点小说网站全部小说.涉及到的问题有:Scrapy架构.断点续传问题.Mongodb数据库相关操作. 背景: Python版本:Anaconda3 运行平台:Windows IDE ...

最新文章

  1. celery 停止任务_celery异步任务框架
  2. python提高办公效率-提升Python程序运行效率的6个方法
  3. Json工具类 - JsonUtils.java
  4. 学习:组件生命周期(1)
  5. df命令,du命令,磁盘分区
  6. acwing 3 完全背包
  7. SAP UI5 OData binding - how does setModel work
  8. ios 自己服务器 苹果支付_iOS应用内支付(IAP)服务端端校验详解
  9. Linux基础(九)--定时任务
  10. python 支付宝个人账单_金融支付财务融合业务-实践分享1:订单、账单、交易流水、账套知识解构、原理解析...
  11. 【前端】数字媒体技术专业主要课程及就业方向
  12. xilinx sdk串口打印helloworld如何打开SDK terminal查看
  13. 希尔密码的加密、解密与破解
  14. Codeforces Round #595 (Div. 3) E. By Elevator or Stairs?
  15. pc端自适应不同屏幕
  16. python为自己龟蜗速更新的小说生成词云
  17. AirTest Poco定位 和启动方式
  18. 百度坐标转WGS84
  19. wpa_supplicant, wpa_cli用法
  20. 基于树莓派实现AS608指纹识别

热门文章

  1. linux逻辑卷缩减命令,linux命令:resize2fs、lvm逻辑卷lv扩展及缩减
  2. Ubuntu 缩减磁盘空间
  3. android 串口调试工具,串口调试助手下载-串口调试助手下载v1.0.4 安卓版-西西软件下载...
  4. PUN☀️八、拓展网络同步:RPCs 和 Properties
  5. [备忘] 下载youtube表单的工具
  6. 士兵突击:每个人的心灵史
  7. 用代码实现windows10下的虚拟桌面创建功能
  8. 《机器学习实战》 自制勘误表 中文版第一版2015年9月第11次印刷版
  9. python实现Instagram网络爬虫
  10. NES模拟器开发笔记(001)缘起、资料及开发准备