文章目录

  • 前言
  • 新版
    • 网站分析
      • 提取内嵌html
      • 分析内嵌html
    • 获取图片链接
      • 代码
    • 下载
    • 合并pdf
  • 旧版
    • 网站分析
      • 提取内嵌html
      • 分析内嵌html
    • 获取图片链接
      • 代码展示
      • 运行结果
    • 下载并合成pdf

前言

不满足于上次从360doc爬取了概率论的答案,这次便研究了一下book118,爬取了里面我需要的答案书。不过由于网站的设计比360doc的复杂,我又不擅长java的爬虫,所以这次用python获取图片链接,接着用之前写的java下载图片并合并成pdf。
2019.8.17
针对网站的变化,采取了新的方式进行爬取
完善了python下载图片并合成pdf的代码

新版

网站分析

提取内嵌html

与旧版不同的是,现在换成了一个php页面进行的预览。

分析内嵌html

图片链接也很容易拿到,通过class选择webpreview-split可以定位到每张图,再获取img的src即可。

其实进这个页面就是为了翻页的方便,很容易找到翻页按钮,通过class选择器page-next就可以选中。

获取图片链接

代码

这里我为了学习一下xpath用到了etree,不会的可以用我之前分析出的class选择器用beautifulsoup4或者pyquery进行元素定位。

from lxml import etree
import time
from selenium import webdriver
from save_mongo import save_to_mongo
browser = webdriver.Chrome()browser.get("https://max.book118.com//index.php?g=Home&m=NewView&a=index&aid=150394748&v=20190731")
# 先翻页
nextpage = browser.find_element_by_class_name('page-next')
for i in range(0, 370):nextpage.click()time.sleep(1)  # 等待图片加载
# 再解析
page_text=browser.page_source
# 解析页面数据(获取页面中的图片链接)
# 创建etree对象
tree = etree.HTML(page_text)
div_list = tree.xpath("//div[@class='webpreview-item']")
urls = []
# 解析获取图片地址和图片的名称
for div in div_list:urls.append(div.xpath('.//img/@src'))
for i in range(len(urls)):print(urls[i])save_to_mongo("information", {"page": str(i+1), "url": urls[i]})

下载

其实可以直接不保存到MongoDB,直接下载;不过旧版的链接保存到了MongoDB,再接着从MongoDB下载。这里延续之前的操作,也可以巩固巩固自己python读取MongoDB的操作吧。

import pymongo
import requests
# 连接MongoDB,创建集合
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["book118"]
mycol = mydb["statistics"]
# 遍历集合
for item in mycol.find():page = item['page'].zfill(3)   # 用0补齐,为了合并的时候字典序不乱if len(item['url']) > 0:url = "http:"+item['url'][0]response = requests.get(url)with open('./image/statistics/'+page+'.png', 'wb') as f:f.write(response.content)else:print(page)  # 打印未加载出来的页面

合并pdf

这里直接改了网上的一段代码

import os
from PIL import Image
# 读取图片列表
picPath = "./image/statistics"
file_list = os.listdir(picPath)
pic_name = []
im_list = []
for x in file_list:if "jpg" in x or 'png' in x or 'jpeg' in x:pic_name.append(picPath+"/"+x)
pic_name.sort()# 合并为pdf
im1 = Image.open(pic_name[0])
pic_name.pop(0)
for i in pic_name:img = Image.open(i)if img.mode == "RGBA":img = img.convert('RGB')im_list.append(img)else:im_list.append(img)
im1.save("实用多元统计答案.pdf", "PDF", resolution=100.0, save_all=True, append_images=im_list)

旧版

网站分析

提取内嵌html

任意打开一本书,开始预览全文

F12调出chrome的控制台,开始寻找图片的链接

取样移动到图片上,可以看到这里获得的就是图片的链接,我们根据这个url就能获得图片资源了。

为了获取链接的方便,我准备将预览的html提取出来,直接进去爬取链接。因为这个预览其实是加载了另一个html,它的地址如下。

直接从浏览器访问这个地址,可以进入一个更简洁的预览状态。

分析内嵌html

继续F12来分析网站,可以发现图片在id为ctn的div下,其中的p0、p1、p2即为对应页数。

仔细查看发现,它并未全部加载完,而且图片链接毫无规律,所以我打算用selenium翻页一张张获取

不难找到翻页按钮的id

手动翻页看看,后面的图片也一点点被加载出来了。

这样以来根据id的顺序,循环起来便可以获得所有的图片链接啦,不再过多分析,上代码吧。

获取图片链接

代码展示

我的代码只是获取了所有图片链接并存到MongoDB便于我java去使用,擅长python的话,可以继续用python下载这些链接的图片也不算麻烦。

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import Byfrom save_mongo import save_to_mongo  #这是我自己封装的工具包browser = webdriver.Chrome()
wait = WebDriverWait(browser, 60)
# 这里的url是内嵌的html地址
browser.get('http://view56.book118.com/?readpage=sGIHz3VDh4qjvNC39O3YGA==&furl=o4j9ZG7fK94ywCJ0aQkdUad3YkM4Kc1@bPc_5q6yqfMcdR5aGeBGGEOqooprci7Mc2hNBPV8646vY0GJFEVC47nwNPrDw0CMZ_Z3K6Xglfs=&n=1')
# 获取翻页按钮
nextpage = browser.find_element_by_id('nextBtn')
for i in range(0, 220):try:# 获取相应页面item = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#p'+str(i))))# 获取页面中的图片链接并打印img = item.find_element_by_tag_name('img')url = img.get_attribute('src')print(url)# save_to_mongo("book118", {"page": str(i+1), "url": url})  #这是我自己封装的工具方法nextpage.click()except TimeoutException:print("加载出错")break

运行结果

可以看到图片的链接都获取到了

随便点开一个查看,就是对应页面的图片,只需要将其下载下即可

220条全都成功存到了MongoDB当中

下载并合成pdf

关于合成pdf的操作,我在之前的文档已经演示过;以后有时间再来完善python的这个操作。
https://blog.csdn.net/weixin_44112790/article/details/86775221

python爬取book118中的书籍相关推荐

  1. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

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

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

  3. python爬取app中的音频_Python爬取喜马拉雅音频数据详解

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python爬取喜马拉雅音频数据详解 一.项目目标 爬取喜马拉雅音频数据 受害 ...

  4. python爬取app中的音频_Python爬取抖音APP,只需要十行代码

    环境说明 环境: python 3.7.1 centos 7.4 pip 10.0.1 部署 [root@localhost ~]# python3.7 --version Python 3.7.1 ...

  5. Python爬取网页中表格数据并导出为Excel文件

    本文使用自己创建的网页进行模拟和演示,在爬取真实网页时,分析网页源代码然后修改代码中的正则表达式即可. 假设某网页源代码为: 在Hbuilder中单击菜单"运行",选择使用Goog ...

  6. 使用Python爬取网页中的表格保存到word

    经常遇到的是爬取网页写入表格中,保存为csv格式.txt格式.最近接到一个任务,复制网页中文字和表格保存到word中,不仅有文字,还有表格.一看有100多页,要是一页一页的复制,要干到什么年月啊. 经 ...

  7. python爬取豌豆荚中的详细信息并存储到SQL Server中

    买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...

  8. php抓取搜狗图片,Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.s ...

  9. Python 爬取豆瓣电影、书籍、音乐Top250

    成果 源码 import requests from bs4 import BeautifulSoupfrom WebWorm.RandomHeader import getRandomHeader ...

  10. python语言的主网址-Python爬取网址中多个页面的信息

    通过上一篇博客了解到爬取数据的操作,但对于存在多个页面的网址来说,使用上一篇博客中的代码爬取下来的资料并不完整.接下来就是讲解该如何爬取之后的页面信息. 一.审查元素 鼠标移至页码处右键,选择检查元素 ...

最新文章

  1. vue中的minix
  2. 友元类实例:日期类 学生类
  3. POJ 1018 Communication System
  4. 关于xml的模糊查询问题
  5. 04_查看Android内存使用情况
  6. Maven中安装本地Jar包到仓库中或将本地jar包上传
  7. C#:泛型(Generic)
  8. MySQL字符串转日期
  9. Qt的QThread多线程使用
  10. 微软高管谈微软远程办公思考与实践,值得每个企业看看
  11. centos6.5 redis3 开机自动启动命令设置
  12. 安卓应用间的数据共享:ContentProvider、ContentResolver全解
  13. Highcharts数据可视化工具功能效果图详解
  14. python编写交互界面设计_第16 p,PYthon中的用户交互,Python GUI编程
  15. 用acdess制作html文件,Acdsee如何制作幻灯片 Acdsee制作幻灯片方法教程
  16. Linux内核API手册——简略版
  17. Qt之Q_PROPERTY(新)
  18. IP远程实施访问另一台电脑
  19. SAP BADI增强点初学分享
  20. 2021高考语文成绩查询,重磅!2021年上海高考分数线权威预测出炉,看看你能上什么大学...

热门文章

  1. [云盘]共享文件列表
  2. Session超时设置
  3. android m4a转mp3格式转换,音频提取格式转换app
  4. [Silverlight]解决Silverlight无法…
  5. JAVA——根据QQ群号得到idkey以及QQ群加群链接[网页版本]解决方案
  6. 大学计算机ppt制作步骤,PPT制作教程步骤方法_PPT制作技巧教程快捷键_PPT制作基础教程...
  7. 美国最受欢迎的量化交易模型有哪些吗?
  8. 企业级项目实战讲解!Java获取某个日期的前一天
  9. 浅谈SQL注入的四种防御方法
  10. Android反编译工具dex2jar的使用