Python爬虫selenium的使用实例爬取知乎首页数据!
1.Selenium简介
Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。我这里使用的是爬取知乎首页文章列表,因查看源码并不是能爬取的html.且查看数据接口,爬取到的数据不是最新的数据,故而使用该框架进行爬取学习。
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
python免费学习资料以及群交流解答点击即可加入
2.安装Selenium&chromdriver.exe
安装Selenium
pip install selenium
下载 chromdriver.exe
我是把下载的文件放置当前python当前目录下建立个目录,因很多人写的是放python安装目录等等,但是如果你吧代码迁移到其他电脑或者服务器上,又得从新下载放置对的目录。我这里在py程序下建立文件夹把三个系统的全部下载好了,使用爬虫只需调用当前函数即可。
下载地址:国内镜像网站地址 官网
如果调用有问题,假如使用谷歌那也许下载谷歌的chromdriver版本对应不上谷歌内核版本,此坑已踩
import sysdef get_driver():platform = sys.platformif (platform.startswith('win32')):return r'./drives/chromedriver.exe'elif (platform.startswith('darwin')):return r'./drives/chromedriver_mac64'else:return r'./drives/chromedriver_linux64'browser =webdriver.Chrome(executable_path=get_driver()) #调用Chrome 驱动,生成浏览器对象
测试安装成功与否(此处使用的是谷歌)
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('http://www.7z72.com/')
3.元素定位
根据Id定位
driver.find_element_by_id('box')
返回第一个id属性匹配的元素,如果没有元素匹配,会抛出 NoSuchElementException 异常
根据Name定位
driver.find_element_by_name("username")
返回第一个name属性匹配的元素, 如果没有元素匹配,会抛出 NoSuchElementException 异常
XPath定位 Xpath学习
#id是box的div元素
driver.find_element_by_xpath("//div[@id=box]")
# from下的所有input元素中name是username的子元素
driver.find_element_by_xpath("//from[input/@name='username']")
# id是loginForm的from元素下的第一个input
driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
# name是username的input元素
driver.find_element_by_xpath("//input[@name='username']")
# type是button并且name是btn的input元素
driver.find_element_by_xpath("//input[@name='btn'][@type='button']")
# id是box的from元素下的第4个input
driver.find_element_by_xpath("//form[@id='box']/input[4]")
使用Xpath可以对页面元素进行觉得定位和相对定位。
链接文本定位超链接
driver.find_element_by_link_text("测试") # 通过完整超链接定位
driver.find_element_by_link_text("www.7Z72.com")
driver.find_element_by_partial_link_text("hao") # 通过部分链接定位
driver.find_element_by_partial_link_text("7z72")
返回第一个文本属性匹配的链接, 如果没有元素匹配,会抛出 NoSuchElementException 异常
根据标签名定位
driver.find_element_by_tag_name('span')
class定位
driver.find_element_by_class_name('text_list')
只返回匹配的第一个,无元素匹配,会抛出 NoSuchElementException 异常
css选择器定位
driver.find_element_by_css_selector('div>span.text')
寻找多个元素(下列方法会返回一个list)
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
私有方法: find_element 和 find_elements
from selenium.webdriver.common.by import Bydriver.find_element(By.XPATH,'//button[text()="Some Text"]')
driver.find_elements(By.XPATH,'//button')Bu类属性:
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag_name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
4.爬取知乎首页文章列表实例
因为查看不了源码(所以实例没有使用解析源码来获取数据),以及爬取json不是最新数据并且只有几条,只能学到此方法
爬取,如果有更多好办法爬取看不到源码的以及数据源有限制的可以交流学习。
该网址数据是页面下拉就会加载数据只需要修改模拟下拉前后时间既可拉取更多数据。如果不设置也就只能拉取固定的几条。
from selenium import webdriver #驱动浏览器
import sys
import time
from selenium.common.exceptions import NoSuchElementException # 定位不到元素错误处理
import json
from fake_useragent import UserAgent# 随机获取User_Agent
def get_fake_User_Agent ():ua = UserAgent()user_anget = ua.randomreturn user_angetheaders = {'User-Agent': get_fake_User_Agent()
}# 识别系统调出chromedriver所在路径
def get_driver():platform = sys.platformif ( platform.startswith('win32') ):return r'./drives/chromedriver.exe'elif ( platform.startswith('darwin') ):return r'./drives/chromedriver_mac64'else:return r'./drives/chromedriver_linux64'browser = webdriver.Chrome(executable_path=get_driver()) # 调用Chrome 驱动,生成浏览器对象
try:browser.get('https://juejin.im/',headers=headers)time.sleep(5)browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') # 模拟下拉time.sleep(2)items_list = browser.find_elements_by_xpath('//*[@id="juejin"]/div[2]/main/div/div/div/div/div/div/ul/div/li')result = []for t in items_list:data_list = t.texttry:if t.find_element_by_css_selector(".action-list").text :data_name = t.find_element_by_css_selector(".user-popover-box").textdata_title = t.find_element_by_css_selector(".title").textif t.find_element_by_css_selector(".item.like.clickable").text == "":data_like = 0else:data_like = t.find_element_by_css_selector(".item.like.clickable").textif t.find_element_by_css_selector(".item.comment.clickable").text == "":data_dislike = 0else:data_dislike = t.find_element_by_css_selector(".item.comment.clickable").textdata_link = t.find_element_by_css_selector(".info-row.title-row a").get_attribute("href")one = {}one["data_name"] = data_nameone["data_title"] = data_titleone["data_like"] = data_likeone["data_dislike"] = data_dislikeone["data_link"] = data_linkresult.append(one)except NoSuchElementException:print("没有找到元素!")print('数据下载完毕')with open('666666.json', 'w', encoding='utf-8') as file:file.write(json.dumps(result, indent=2, ensure_ascii=False))finally:browser.close()
得到的数据结果
此文仅供参考学习的简单代码没有其他博主的深入,小白即可入手,如有错误请指出。
Python爬虫selenium的使用实例爬取知乎首页数据!相关推荐
- python爬虫实战(一)--爬取知乎话题图片
原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...
- Python爬虫Selenium手动接管Edge爬取裁判文书网“环境污染”数据(Mac环境)
目标数据:爬取从2007年到2022年,各地级市中级法院历年关于"环境污染"的裁判文书数量. 由于裁判文书网需要登录,Selenium手动接管爬取可避免频繁登录造成的封号风险. S ...
- python爬虫实战(2)——爬取知乎热榜内容
文章目录 一.前期准备 1.获取headers 2.查看网页源代码 二.python代码实现 1.解析网页 2.获取标签 3.完整代码 三.最终结果 一.前期准备 1.获取headers 登录知乎官网 ...
- python爬虫实战(1)——爬取知乎热门回答图片
文章目录 一.前期准备 1.查看网页源代码 2.看图片在什么位置 二.python代码实现 1.解析网页 2.获取问题标题 3.获取回答者信息 4.图片保存到本地 5.完整代码 三.最终结果 一.前期 ...
- 【python】实验2项目2:使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(陈奕迅)
请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词.流派.歌曲发行时间.评论条数.评论时间.评论点赞次数.评论内容具体(每一首歌的评论& ...
- Python爬虫开源项目代码(爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网 等等)...
文章目录 1.简介 2.开源项目Github 2.1.WechatSogou [1]– 微信公众号爬虫 2.2.DouBanSpider [2]– 豆瓣读书爬虫 2.3.zhihu_spider [3 ...
- Python爬虫笔记(3)- 爬取丁香园留言
Python爬虫笔记(3)- 爬取丁香园留言 爬取丁香园留言:主要用到了模拟登录 爬取丁香园留言:主要用到了模拟登录 import requests, json, re, random,time fr ...
- Python爬虫开源项目代码(爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网 等等)
文章目录 1.简介 2.开源项目Github 2.1.WechatSogou [1]– 微信公众号爬虫 2.2.DouBanSpider [2]– 豆瓣读书爬虫 2.3.zhihu_spider [3 ...
- python爬虫 - 起点女生榜单爬取 - 1
python爬虫 - 起点女生榜单爬取 最近一直在追庆余年,顺带瞄了一眼小说,真真是精彩(虽然因为范闲多妻的设定接受不了就放弃了). 说来说去,还是钟爱女频的修仙小说,所以就想爬一下起点女生网 ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
最新文章
- 直播回顾|基于格雷码结合相移技术的高鲁棒性高效率动态三维面形测量
- 黄聪:NaviCat通过Http方式连接服务器的MySQL数据库(转)
- 通知栏管理NotificationListenerService
- wget ip_10分钟搭建个人开源博客+域名ip解析
- qt 在点击菜单下的动作之后获取该菜单的名称
- (轉貼) ThinkPad鍵盤設計原理和哲學 (NB) (ThinkPad)
- 在windows 2008 R2上安装sharepoint 2013时遇到提示必须安装 .netframeword4.5的处理办法...
- csplit 分割文件
- cmake BUILD_SHARED_LIB变量
- 湖南理工学院计算机专业课表,下学期课表“新鲜出炉”,你查了吗?
- linux使用教程_iTOP-4412-QtE系统源码以及Linux系统-wfi设置以及使用文档 - 心底狂像...
- Android视频播放
- LINUX SHELL安装deb命令
- 如何用photoshop识别图片上文字的字体
- R语言编程 R语言作业
- 查询央行征信的APP有哪些?
- 网卡收到一个数据包的时候,是如何传给应用层的
- SpringCloud学习笔记
- Python自动化 | 通过键盘控制鼠标来玩赛尔号
- SCI,SSCI,EI傻傻分不清
热门文章
- An unexpected connection driver error occured错误(亲测有效)
- WebSpider简介
- python读取docx中表格 图片_Python-docx 读写 Word 文档:插入图片、表格,设置表格样式,章节,页眉页脚等...
- VB中数组的大小排序解析
- C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。
- 799-C++异常类型以及多级catch匹配
- cmd中mysql的操作语句_cmd命令行数据库操作语句
- luogu P4315 月下“毛景树”
- JSTL 标签大全详解
- Python爬取全网文字并词云分析(全程一键化!)