用webdriver模仿浏览器 爬取豆瓣python书单

其中运用到os 模块 作用是生成文件夹 存储爬取的信息

etree 用于xpath解析内容 详细代码如下 可用我的上一篇博客存取到excel当中

import os
import time
from selenium import webdriver
from lxml import etree
#创建文件夹 没有指定的文件夹则创建 有则跳过
root_dir = 'douban/img'
if not os.path.exists(root_dir):
os.mkdir(root_dir) #生成浏览器对象
driver = webdriver.PhantomJS() #抓取页面函数
def spider(page):
base_url = 'https://book.douban.com/subject_search?search_text=python&cat=1001&start=%s'%(page*15)
#用浏览器的get获取上述网址的网页
driver.get(base_url)
#阻塞四秒 让页面完全显示出来
time.sleep(4)
#命名文件名称和存储文件路径
filename = root_dir + '/%s.png'%(page)
#截屏并保存 这只是图片 在指定路径查找看是否有图片
driver.save_screenshot(filename) #打印页面内容 可以打印出页面元素
# print(driver.page_source) #在解析函数中解析页面元素
content_parser(driver.page_source) #解析函数
def content_parser(content):
#我们这一次用xpath来解析 首先把上述内容生成树结构
tree = etree.HTML(content)
#在全部内容中 查找class为item-root的div 生成一个书列表
books = tree.xpath('//div[@class="item-root"]') #遍历列表 获取每本书的信息
for book in books:
#拿取书皮图片信息
book_src = book.xpath('./a/img/@src')
if book_src != []:
book_src = book_src[0] #书名
book_name = book.xpath('.//div[@class="title"]/a')
if book_name != []:
book_name = book_name[0].text #书籍详细信息链接href
book_href = book.xpath('.//div[@class="title"]/a/@href')
if book_href != []:
book_href = book_href[0] #评分
book_rating = book.xpath('.//span[@class="rating_nums"]')
if book_rating != []:
book_rating = book_rating[0].text #细节 作者什么的
book_detail = book.xpath('.//div[@class="meta abstract"]')
if book_detail != []:
book_detail = book_detail[0].text #打印需要一些时间 需要耐心等待哦
print(book_src,book_name,book_href,book_rating,book_detail) #主进程
if __name__ == '__main__':
#打印10个页面信息 每个页面信息15本书
for i in range(10):
spider(i)
'''
book:
<div class="item-root"> <a href="https://book.douban.com/subject/26829016/" data-moreurl="onclick=&quot;
moreurl(this,{i:'0',query:'python',subject_id:'26829016',from:'book_subject_search',
cat_id:'1001'})&quot;" class="cover-link">
<img src="https://img3.doubanio.com/lpic/s28891775.jpg"
alt="Python编程:从入门到实践 : 从入门到实践" class="cover" />
</a>
<div class="detail"> <div class="title">
<a href="https://book.douban.com/subject/26829016/" data-moreurl="onclick=&quot;
moreurl(this,{i:'0',query:'python',subject_id:'26829016',from:'book_subject_search',
cat_id:'1001'})&quot;" class="title-text">Python编程:从入门到实践 : 从入门到实践</a>
</div> <div class="rating sc-bwzfXH hxNRHc">
<span class="allstar45 rating-stars"></span>
<span class="rating_nums">9.0</span>
<span class="pl">(457人评价)</span>
</div> <div class="meta abstract">
[美]埃里克&middot;马瑟斯 / 袁国忠 / 人民邮电出版社 / 2016-7-1 / CNY 89.00
</div> <div class="meta abstract_2"></div> </div>
</div>
'''

用webdriver模仿浏览器 爬取豆瓣python书单的更多相关文章

  1. Python开发爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据

    所谓静态页面是指纯粹的HTML格式的页面,这样的页面在浏览器中展示的内容都在HTML源码中. 目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/t ...

  2. 利用Python爬取豆瓣电影

    目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...

  3. python爬取豆瓣电影信息数据

    题外话+ 大家好啊,最近自己在做一个属于自己的博客网站(准备辞职回家养老了,明年再战)在家里 琐事也很多, 加上自己 一回到家就懒了(主要是家里冷啊! 广东十几度,老家几度,躲在被窝瑟瑟发抖,) 由于 ...

  4. python 爬取豆瓣电影短评并wordcloud生成词云图

    最近学到数据可视化到了词云图,正好学到爬虫,各种爬网站 [实验名称] 爬取豆瓣电影<千与千寻>的评论并生成词云 1. 利用爬虫获得电影评论的文本数据 2. 处理文本数据生成词云图 第一步, ...

  5. Python爬虫小白入门(七)爬取豆瓣音乐top250

      抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...

  6. python定时器爬取豆瓣音乐Top榜歌名

    python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet mail:vpoet_sir@163.com 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 # ...

  7. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)

    1.  爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: 2)数据提取,将web站点所获取的数据进行处理,获取所需要的数据,常使用的技 ...

  8. Python爬虫实例:爬取豆瓣Top250

    入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...

  9. Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

随机推荐

  1. [BZOJ 3991][SDOI2015]寻宝游戏(dfs序)

    题面 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的道路 ...

  2. Codeforces - 1191B - Tokitsukaze and Mahjong - 模拟

    https://codeforces.com/contest/1191/problem/B 小心坎张听的情况. #include<bits/stdc++.h> using namespac ...

  3. 【经典转载】关于Struts2的拦截器

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  4. javascript的继承模式

    在javascript里面看到javascript的继承模式和传统的继承模式是有区别的,就想查资料看一下到底有区别,就看到了这篇文章,觉得讲得还可以,暂时先放上来,以后有别的东西再补充: http:/ ...

  5. Ubuntu18.04+CUDA9.0+cuDNN7.1.3+TensorFlow1.8 安装总结

    Ubuntu18.04发行已经有一段时间了,正好最近Tensorflow也发布了1.8版本,于是决定两个一起装上,以下是安装总结,大致可 以分为5个步骤 确认当前软件和硬件环境.版本 更新显卡驱动,软 ...

  6. 《程序员的呐喊》:一个熟悉多种语言的老程序员对编程语言、开发流程、google的战略等的思考,比较有趣。 五星推荐

    作者熟悉二三十种编程语言,写了20多年代码.本书是作者对编程语言.开发流程.google的战略等的思考.比较有趣. 前面部分是作者对编程语言的一些思考.作者鄙视C++, Java,面向对象.比较有趣的 ...

  7. Envoy的线程模型[翻译]

    Envoy threading Model 关于envoy 代码的底层文档相当稀少.为了解决这个问题我计划编写一系列文档来描述各个子系统的工作.由于是第一篇, 请让我知道你希望其他主题覆盖哪些内容. ...

  8. HTML超链接应用场景

    页面间的连接 A页到B页,最常用,用于网络导航. 如图所示: ********************************************************************* ...

  9. Elastic Search快速入门

    https://blog.csdn.net/weixin_42633131/article/details/82902812 通过这个篇文章可以快速入门,快速搭建一个elastic search de ...

  10. bzoj5049 [Lydsy1709月赛]导航系统 双向bfs

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5049 题解 题面里面满眼的随机.既然数据完全随机,那就是在锻炼选手的乱搞能力啊. 根据一个常用 ...