python爬虫实战笔记——爬取图书信息(利用selenium库+chromedriver.exe插件)
准备:
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插件)相关推荐
- python爬虫实战之图灵社区图书信息的爬取(找了久,才找到一个比较好爬取的网站)
python爬虫实战之图灵社区图书信息的爬取 程序的描述 目标 获取图灵社区(https://www.ituring.com.cn/book)中40本图书的书名 将获取的信息以列表的形式输出到屏幕上, ...
- Python爬虫学习笔记 -- 爬取糗事百科
Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...
- Python爬虫实战之爬取糗事百科段子
Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...
- Python爬虫实战之爬取百度贴吧帖子
Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...
- Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)
在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...
- Python爬虫实战之爬取网站全部图片(一)
Python爬虫实战之爬取网站全部图片(二) Python爬虫实战之通过ajax获得图片地址实现全站图片下载(三) 一.获得图片地址 和 图片名称 1.进入网址之后 按F12 打开开发人员工具点击e ...
- 携程ajax,Python爬虫实战之爬取携程评论
一.分析数据源 这里的数据源是指html网页?还是Aajx异步.对于爬虫初学者来说,可能不知道怎么判断,这里辰哥也手把手过一遍. 提示:以下操作均不需要登录(当然登录也可以) 咱们先在浏览器里面搜索携 ...
- Python爬虫:Xpath爬取网页信息(附代码)
Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...
- Python爬虫实战之 爬取全国理工类大学数量+数据可视化
上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...
最新文章
- OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。
- Java进阶:多线程Lock管理多个Condition的实践
- SAP Spartacus 的延迟加载 Lazy load 设计原理
- Visual studio代码行数统计
- host 和TNS设置
- 光驱怎么挂载第二个光驱_重装系统下侦测不到光驱怎么解决?
- Xamarin开发笔记—设备类第三方弹窗的使用和注意事项
- 区分IE6,IE7,firefox三种浏览器的CSS HACK
- java迭代器不能修改集合值_关于使用迭代器对集合进行遍历时,不能对集合进行修改的论证...
- tbytes 转 十六进制 string
- android怎样开启root权限管理,手机怎样开启root权限(最新安卓手机一键root教程)...
- Android动画之Interpolator插入器
- css 实现一个尖角_css 实现一个带尖角的正方形
- 快递面单隐私保护教程
- 【2023.3.18 美团校招】
- OpenCV中HSV与PS中HSB对应关系
- 嵌入式Linux系统环境搭建全流程-4412友善之臂开发板
- matlab点符号怎么打出来的,在matlab中怎么输入特殊符号
- 自己动手利用CentOS6.5 搭建php环境安装discuz论坛
- 稳赢2020,华米科技何以再创新高?