网址: http://book.douban.com/subject_search?search_text=python&cat=1001&start=%s0

需求: 获取所有 python 书籍的信息

首页

进入页面按f12,查询页面信息

在页面当中未查取到数据,因此需要创建selenium.webdriver对象,去解析页面的源代码。

最后通过xpath语法去筛选标签获取所需要的数据。

代码实现:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait   # 等待对象
from selenium.webdriver.support import expected_conditions as EC   # 条件
from selenium.webdriver.common.by import By # 定义定位器的常量
from lxml import etree
import timedef get_content_by_selenium(url):'''通过selenium获取页面内容'''# 2、请求driver.get(url)# 3、等待:让程序在这里停一会,关注:停到啥时候# 意义:就是为了让浏览器能够请求结束,(不在转圈圈),同时让page_sourse里面包含需求数据。# 有三种等待方式:效率是步一样的。# 第一种等待方式:强制等待# time.sleep(4)#缺点:操作简单,但是效率很低。# 第二种等待方式:隐式等待。# driver.implicitly_wait(20)#20:表示最大等待时长,20秒还没有等到圈圈转完,就报 一个超时异常。# 等待到页面不在转圈圈为止。# 隐式等待有缺点:隐式等待其实就是等到将html页面所有数据全部加载执行完毕显示的时候。# 但是有时候,页面中的广告,图片这些很消耗时间,我们其实只想要包含数据的那个div里面内容。# 第三种:显式等待:等待到【特定一些页面元素】满足【某些条件】位置。#(1)创建显示等待对象# driver:表示显示等待对象监听到那个浏览器上# 20:最大等待时长# (2)等待# presence_of_element_located(定位器):等待定位器定位的元素出现内容# presence_of_all_elements_located()    #等待定位器定位的元素全部出现内容# 定位器:是一个元组(使用的定位语法,'对应语法的筛选路径')res = wait.until(EC.presence_of_all_elements_located((By.XPATH,'//*[@id="root"]/div/div[2]/div[1]/div[1]/div')))print(res)    # webelement对象# 4、获取页面源代码html_str = driver.page_source#print(html_str)return html_strdef parse_page(html_str):'''将页面内容变成element对象使用xpath提取'''tree = etree.HTML(html_str)# 提取# 获取所有包含书的divdiv_list = tree.xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div[position()>1]')for div in div_list:try:# 书名book_title = div.xpath('.//div[@class="title"]/a/text()')[0]# 详情页urlbook_url = div.xpath('.//div[@class="title"]/a/@href')[0]# 评分book_score = div.xpath('.//span[@class="rating_nums"]/text()')[0]# 评论数book_comment_num = div.xpath('.//span[@class="pl"]/text()')[0]infos = div.xpath('.//div[@class="meta abstract"]/text()')[0]infos = infos.split(r'/')# print(infos)book_author = infos[0]book_price = infos[-1]book_public = infos[-3]book_date = infos[-2]item = {}item['book_title'] = book_titleitem['book_url'] = book_urlitem['book_score'] = book_scoreitem['book_comment_num'] = book_comment_numitem['book_author'] = book_authoritem['book_price'] = book_priceitem['book_public'] = book_publicitem['book_date'] = book_date# print(item)except Exception:passdef main():# 1、确定urlbase_url = 'https://book.douban.com/subject_search?search_text=python&cat=1001&start=%s'# 2、分页for i in range(10):html_str = get_content_by_selenium(base_url %(i*15))# 3、解析:将页面内容变成element对象使用xpath提取parse_page(html_str)if __name__ == '__main__':# 优化的思想:打开一个浏览器之后,在浏览器中请求即可。# 将创建驱动和显示等待对象都应该定义全局变量中即可。# 1、创建driver对象driver = webdriver.Chrome()wait = WebDriverWait(driver, 20)start = time.time()main()print('程序运行时间:',time.time()-start)#程序运行时间: 56.93825650215149# #20.5081729888916

最帅爬虫_豆瓣读书(加密数据获取)相关推荐

  1. Python爬虫(5):豆瓣读书练手爬虫

    Python爬虫(5):豆瓣读书练手爬虫 我们在之前的文章中基本上掌握了Python爬虫的原理和方法,不知道大家有没有练习呢.今天我就来找一个简单的网页进行爬取,就当是给之前的兵书做一个实践.不然不就 ...

  2. Python分布式爬虫实战 - 豆瓣读书

    本实例从零到一实现豆瓣读书的所有标签的分布式爬虫编写 本实例使用到的工具: IDE:Pycharm 工具:Python,Scrapy,linux,mysql,redis 需要用到的模块:scrapy ...

  3. 利用python爬虫获取豆瓣读书数据建立书单

    0. 写在前面 网络爬虫: A Web crawler, sometimes called a spider, is an Internet bot that systematically brows ...

  4. python_爬虫_豆瓣TOP250_url

    本文仅供学习使用,如有侵权,联系删除. 获得豆瓣top 250书单的url import lxml import requests import re import csv from requests ...

  5. python_爬虫_豆瓣TOP250_页面内容

    本文仅供学习使用,如有侵权,联系删除 豆瓣TOP250书籍页面内容如下,此次将爬取图片中的内容 from bs4 import BeautifulSoup import lxml import req ...

  6. 爬虫_豆瓣全部正在热映电影 (xpath)

    单纯地练习一下xpath 1 import requests 2 from lxml import etree 3 4 5 def get_url(url): 6 html = requests.ge ...

  7. python爬虫_爬取豆瓣读书top500存入到excel文件

    目的:学习笔记 代码写的有点糟糕,还得努力,欢迎各位帮忙优化代码,嘻嘻嘻. 代码: import requests,xlwt #导入相关库,xlwt库用来写入到excel from lxml impo ...

  8. 爬虫实战-爬取豆瓣读书书籍信息

    1. 豆瓣读书书籍种类列表 在下面这个URL, 我们可以获得所有的种类链接 https://book.douban.com/tag/ 如下图: 可以通过bs4和re库进行筛选, 得到所有图书种类, 结 ...

  9. 爬虫练习:爬豆瓣读书的短评

    爬虫练习:爬豆瓣读书的短评 利用第三方库requests爬取网页内容,然后利用BeautifulSoup解析网页内容,得到我们想要的数据. 任务1:爬豆瓣读书<下町火箭>的短评. 利用re ...

最新文章

  1. plotly可视化绘制共享坐标轴图
  2. hadoop java client_hadoop3 Java client客户端kerberos认证
  3. Django连接数据mysql
  4. 一个好的组件应该是什么样的?
  5. hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
  6. CMake 入门与进阶
  7. 简单聊聊模型的性能评估标准
  8. Leetcode-区域和检索-数组不可变
  9. ifconfig命令为centos linux系统配置临时的局域名IP、网关以及子网掩码
  10. 一刷leetcode——树
  11. 在OpenStack虚拟机实例中创建swap分区的一种方法
  12. MySql 中文乱码问题
  13. neutron用linux_bridge部署provider网络
  14. MIUI 13 去除输入法广告
  15. PS 画笔工具与文字工具
  16. 苹果手机数据能恢复吗
  17. [Hadoop]Hadoop Archives
  18. 我的面试题. 业务抽象能力测试.
  19. Linux tar(打包,解打包)命令
  20. BT下载不死!Magnet(磁力链接)开创网络BT2.0时代!!

热门文章

  1. java qq登陆 server_java实现QQ互联登录
  2. 关于图像融合 视频融合
  3. 【我的前端】网站开发:设计响应式网站的八大因素
  4. 类似直播App的向右滑动清屏功能
  5. 家用电脑设置成小程序服务器,电脑微信小程序设置全屏的方法是什么
  6. luoguP4568 [JLOI2011]飞行路线
  7. 原著《西游记》中的几点不解和穿帮
  8. thinkphp6 验证码总是提示不正确
  9. 极客日报:腾讯回应微信刷掌支付;iPhone 13 Pro或提供1TB版本;Git 2.33 发布
  10. 计算机的资源管理器是电脑上的哪个图标,Win10资源管理器中“此电脑”光驱图标不见了怎么办?解决方法...