准备:

1、插件chromedriver.exe

2、已经安装好谷歌浏览器Chrome

编写代码

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import Select,WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import random
import numpy as np
import pandas as pd#=============第一步:下载网页数据到本地=====================
#各种USER_AGENTS,反 反爬虫机制
USER_AGENTS = ["Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36","Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16","Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14","Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14","Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1","Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0","Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A","Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10","Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3",]#chromedriver插件:作用:会自动控制浏览器,进行点击等操作
driver_path = r'D:\output2020\chromedriver.exe'
#初始化一个对象,ChromeOptions代表浏览器的操作
options = webdriver.ChromeOptions()  #这是一个空对象#随机产生user_agent
def change_useragent(options,USER_AGENTS):user_agent = random.choice(USER_AGENTS)  #从USER_AGENTS随机选择一个options.add_argument('User-Agent=%s'%user_agent)  #拼接好一个报文user_agent = random.choice(USER_AGENTS)
options.add_argument('User-Agent=%s'%user_agent)
#插件使用
driver = webdriver.Chrome(chrome_options = options,executable_path = driver_path)#访问路径
url = "https://read.douban.com/category?sort=new&page=1&kind=1"
driver.get(url)  #浏览器访问该地址,driver获取了该网页所有内容#随便加载一个元素(class),之后开始获取页面
#设置爬取时的网页等待时间,超时则放弃爬取,防止网络中断等故障的影响
WebDriverWait(driver=driver,timeout=10).until(#表示如果加载完这个works-item类就好了,如果没有加载完就一直加载直到超过10sEC.presence_of_element_located((By.CLASS_NAME,'works-item')) #works-item这个类是在网页检查中找的类
)#=====================第二步:分析html====================
#=====================第三步:保存文本====================
df = pd.DataFrame(columns=['img_url','title','author','detail','bookClass','bookPrice','codeCount','pubtime'])#分析每一页的html元素,找到需要的元素,并保存
def parse_page(resource):#解析数据soup = BeautifulSoup(resource,'lxml')#观察网页,提取元素books = soup.find_all('li',class_ = 'works-item' )#遍历每一个li(一本书)for book in books:#获取书本价格(有特价的取特价,没特价的取原价)try:book.find_all('span',class_ ='discount-price')[0].get_text()except:price = book.find_all('span',class_ ='price-tag')[0].get_text()else:price = book.find_all('span',class_ ='discount-price')[0].get_text()#获取发布日期pubtime = book.find_all('span',class_ ='flexible-info-item')[0].get_text()#封面图片链接img_url = book.find_all('img')[0].get('src')#书名title = book.find_all('a',class_ ='title-container')[0].get('title')#作者等信息author = book.find_all('a', class_='author-link')[0].get_text()#简介detail = book.find_all('div',class_ ='intro')[0].get_text()#字数flag = book.find_all('div',class_ ='sticky-info')[0]codecount = flag.find_all('span')[0].get_text()#分类bookcl = book.find_all('a',class_ ='kind-link')[0].get_text()# 保存到文本 pd.DataFrame(columns=['img_url','title','author','detail','bookClass','bookPrice','codeCount','pubtime'])#意思是,把img_url当作主键列(其值具有唯一性),主键列的值相同的会放到一行中df.loc[img_url] = np.nan  # nonedf.loc[img_url]['img_url'] = img_urldf.loc[img_url]['title'] = titledf.loc[img_url]['author'] = authordf.loc[img_url]['detail'] = detaildf.loc[img_url]['bookClass'] = bookcldf.loc[img_url]['bookPrice'] = pricedf.loc[img_url]['codeCount'] = codecountdf.loc[img_url]['pubtime'] = pubtime# 刷新到文本 csvdf.to_csv('./douban_book.csv')   #写入当前文件夹下的douban_book.csv中#主程序
while True:#获取下一页(在网页检查页面中找到该页面的点击进入下一页的按钮的hmtl代码,由此来定位)next_btn = driver.find_element_by_xpath("//div[@class='paginator-full']/ul/li[last()]/a")#获取本页的html的元素resource = driver.page_source#每一页的页面分析(从每一个页面的元素中挑出需要的信息)parse_page(resource)print('本业爬取完成,开始下一页')#拉动滚动条,显示下一页按钮driver.execute_script("arguments[0].scrollIntoView(true);",next_btn)#判断是否有效if "disabled" in next_btn.get_attribute('class'):break#反反爬虫change_useragent(options,USER_AGENTS)time.sleep(5)

python爬虫实战笔记——爬取图书信息(利用selenium库+chromedriver.exe插件)相关推荐

  1. python爬虫实战之图灵社区图书信息的爬取(找了久,才找到一个比较好爬取的网站)

    python爬虫实战之图灵社区图书信息的爬取 程序的描述 目标 获取图灵社区(https://www.ituring.com.cn/book)中40本图书的书名 将获取的信息以列表的形式输出到屏幕上, ...

  2. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  3. Python爬虫实战之爬取糗事百科段子

    Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...

  4. Python爬虫实战之爬取百度贴吧帖子

    Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...

  5. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  6. Python爬虫实战之爬取网站全部图片(一)

    Python爬虫实战之爬取网站全部图片(二) Python爬虫实战之通过ajax获得图片地址实现全站图片下载(三) 一.获得图片地址 和 图片名称 1.进入网址之后 按F12  打开开发人员工具点击e ...

  7. 携程ajax,Python爬虫实战之爬取携程评论

    一.分析数据源 这里的数据源是指html网页?还是Aajx异步.对于爬虫初学者来说,可能不知道怎么判断,这里辰哥也手把手过一遍. 提示:以下操作均不需要登录(当然登录也可以) 咱们先在浏览器里面搜索携 ...

  8. Python爬虫:Xpath爬取网页信息(附代码)

    Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...

  9. Python爬虫实战之 爬取全国理工类大学数量+数据可视化

    上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...

最新文章

  1. OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。
  2. Java进阶:多线程Lock管理多个Condition的实践
  3. SAP Spartacus 的延迟加载 Lazy load 设计原理
  4. Visual studio代码行数统计
  5. host 和TNS设置
  6. 光驱怎么挂载第二个光驱_重装系统下侦测不到光驱怎么解决?
  7. Xamarin开发笔记—设备类第三方弹窗的使用和注意事项
  8. 区分IE6,IE7,firefox三种浏览器的CSS HACK
  9. java迭代器不能修改集合值_关于使用迭代器对集合进行遍历时,不能对集合进行修改的论证...
  10. tbytes 转 十六进制 string
  11. android怎样开启root权限管理,手机怎样开启root权限(最新安卓手机一键root教程)...
  12. Android动画之Interpolator插入器
  13. css 实现一个尖角_css 实现一个带尖角的正方形
  14. 快递面单隐私保护教程
  15. 【2023.3.18 美团校招】
  16. OpenCV中HSV与PS中HSB对应关系
  17. 嵌入式Linux系统环境搭建全流程-4412友善之臂开发板
  18. matlab点符号怎么打出来的,在matlab中怎么输入特殊符号
  19. 自己动手利用CentOS6.5 搭建php环境安装discuz论坛
  20. 稳赢2020,华米科技何以再创新高?

热门文章

  1. 甜品消消乐 14 消除
  2. Ubuntu下外接显示器双屏显示的方法
  3. 朋友圈营销鱼龙混杂 微信商业化谨慎前行
  4. Linux下安装卸载jdk8.x版本
  5. PHP count() empty() isset() 的应用
  6. Java数学表达式计算(中缀转后缀表达式)
  7. WIN7计算机里面有显示桌面,Win7的显示桌面在哪 Win7显示桌面快捷键
  8. 零基础学Premiere PRO中文版视频教程
  9. 支付宝创新未遂,微信红包成功守擂
  10. Kong网关之蓝绿部署和金丝雀发布