目录
1、小小课堂html
2、selenium+driver初步尝试控制浏览器python
3、完整代码nginx
4、运行结果web
连接:https://search.douban.com/book/subject_search?search_text=python&cat=1001
首先咱们须要先找下有没有接口
可是经过查看,咱们发现是没有接口的。通过分析,这个网站展现的数据,不能经过以前的方式获取,猜测是经过加密解密获得的内容。这个时候有两种方式
a:找到加密解密的接口,使用python模拟(至关复杂,必须有解析js的能力)
b:使用selenium+driver直接获取解析后的页面数据内容(这种相对简单)
固然了,咱们只是分析了接口这一部分,其实咱们经过查看网页源码,使用xpath进行尝试解析,发现实际上是可行的,可是因为本文使用的是自动化工具selenium,因此就不过多解释xpath。
在这里,咱们使用selenium+driver能模拟浏览器找到elements里的内容,这样再提取就没问题了。
接下来咱们须要了解一些概念chrome
1.什么是selenium?
selenium是网页自动化测试工具,能够自动化的操做浏览器。若是须要操做哪一个浏览器须要安装对应的driver,好比你须要经过selenium操做chrome,那必须安装chromedriver,并且版本与chrome保持一致。npm
二、driver
操做浏览器的驱动,分为有界面和无界面的
有界面:与本地安装好的浏览器一致的driver(用户能够直接观看,交互好比单击、输入)
无界面:phantomjs(看不到,只能经过代码操做,加载速度比有界面的要快)编程
了解完以后,安装selenium:浏览器
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
下载driver:ruby
1. phantomjs
phantomjs下载网址https://phantomjs.org/download.html微信
2. chrome谷歌浏览器对应的driver
http://npm.taobao.org/mirrors/chromedriver/
下载好以后,放入项目中,方便找到。
2、selenium+driver初步尝试控制浏览器
说到模拟,那咱们就先来模拟如何打开豆瓣图书并打开Python相关的图书
from selenium import webdriverimport timeimport requests
start_url = "https://book.douban.com/subject_search?search_text=python&cat=1001&start=%25s0"
# 控制chrome浏览器driver = webdriver.Chrome("./chromedriver/chromedriver.exe")# 输入网址driver.get(start_url)
# 停一下,等待数据加载完毕time.sleep(2)# 获取网页内容Elementscontent = driver.page_source# 结束driver.quit()
🆗,说明咱们可以控制浏览器进行操做,那么这样咱们就能够进行下一步操做了。
咱们首先先提取数据
# 获取网页内容Elementscontent = driver.page_source
# 提取数据print(content)
提取到数据后,咱们查到里面是否存在咱们所要爬取的图书,在此咱们以《Python编程 : 从入门到实践》为切入点
这个时候,咱们首先要查看这个页面内是否存在有iframe
经过查找,咱们发如今咱们要爬取的部分是没有iframe存在的,所以咱们能够直接使用xpath进行解析。
先查看网页源码,而后尝试解析
1. 解析总体部分
2. 解析书名
3. 解析评分
4.解析其余
🆗到这里咱们就解析完成了,可是咱们若是直接这样写的话,实际上是有点问题的,问题是什么呢?咱们能够看下结果
代码以下:
data_list = etree.HTML(content).xpath('//div[@class="item-root"]')# print(data_list)for data in data_list: item = {} item["name"] = data.xpath("./div/div[1]/a/text()") item["score"] = data.xpath("./div/div[2]/span[2]/text()") item["others"] = data.xpath("./div/div[3]/text()") print(item)
咱们能够看到标红处,有的数据是获取不到的,这难道是咱们代码有问题吗?其实咱们的代码并无问题。咱们看下网页
咱们能够很清楚的看到,第一个<div class = "item-root"></div>
并非咱们所要找的书籍,所以咱们能够从第二个进行爬取。
修改后的代码以下
data_list = etree.HTML(content).xpath('//div[@class="item-root"]')[1:]# print(data_list)for data in data_list: item = {} item["name"] = data.xpath("./div/div[1]/a/text()")[0] item["score"] = data.xpath("./div/div[2]/span[2]/text()")[0] item["others"] = data.xpath("./div/div[3]/text()")[0] print(item)
这个时候,就是咱们须要的内容了。内容的问题解决了,下面就须要考虑自动翻页了。
咱们经过查看网页的翻页过程,以下:
经过观察翻页部分的网页就够,咱们能够之后页为关键词选取其中的href自动翻转到下一页。顺便再加上一个断定若是没有就自动中止。
咱们下用xpath进行分析
代码以下
# 找到后页 next = driver.find_element_by_xpath('//a[contains(text(),"后页")]') # 判断 if next.get_attribute("href"): # 单击 next.click() else: # 跳出循环 break
3、完整代码
# encoding: utf-8''' @author 李运辰 @create 2020-11-21 11:34 @software: Pycharm @file: 豆瓣图书.py @Version:1.0 '''from selenium import webdriverfrom lxml import etreeimport osimport timeimport requestsimport reimport csv
start_url = "https://book.douban.com/subject_search?search_text=python&cat=1001&start=%25s0"
# 控制chrome浏览器driver = webdriver.Chrome("./chromedriver/chromedriver.exe")# 输入网址driver.get(start_url)while True: # 停一下,等待加载完毕 time.sleep(2) # 获取网页内容Elements content = driver.page_source # 提取数据 data_list = etree.HTML(content).xpath('//div[@class="item-root"]')[1:] for data in data_list: item = {} item["name"] = data.xpath("./div/div[1]/a/text()")[0] item["score"] = data.xpath("./div/div[2]/span[2]/text()")[0] with open("./豆瓣图书.csv", "a", encoding="utf-8") as file: writer = csv.writer(file) writer.writerow(item.values()) print(item) # 找到后页 next = driver.find_element_by_xpath('//a[contains(text(),"后页")]') # 判断 if next.get_attribute("href"): # 单击 next.click() else: # 跳出循环 break# 结束driver.quit()
4、运行结果
- END -
欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章
记录学习python的点点滴滴;
回复【开源源码】免费获取更多开源项目源码;
本文分享自微信公众号 - Python爬虫数据分析挖掘(zyzx3344)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。