浏览器抓取网页(python+selenium爬虫全流程详解+python爬虫简介 )

优采云 发布时间: 2022-03-13 21:08

  浏览器抓取网页(python+selenium爬虫全流程详解+python爬虫简介

)

  python+selenium爬虫全流程详解

  selenium+python爬虫介绍

  本教程的大部分内容都是基于个人经验,其中一些是口语化的

  如有不妥之处,请及时更正(可评论或私信)

  硒测试脚本

  Selenium其实是一个web自动化测试工具,可以完全模拟使用浏览器自动访问目标站点,通过代码操作进行web测试。

  蟒蛇+硒

  通过python+selenium的组合来实现爬虫是非常巧妙的。

  由于是模拟人类点击操作,实际被反转的概率会大大降低。

  Selenium 可以在页面上执行 js,处理 js 渲染的数据并模拟登录非常容易。

  该技术还可以与正则表达式、bs4、request、ip pool等其他技术结合使用。

  当然,由于在获取页面的过程中会发送很多请求,效率低,爬取速度也会比较慢。推荐用于小规模数据爬取。

  selenium安装可以直接通过pip安装

  pip3 install selenium

  导入包

  from selenium import webdriver

  模拟浏览器----以chrome为例安装浏览器驱动

  关联:

  我们只需要在上面的链接中下载对应版本的驱动,放到python安装路径的scripts目录下即可。

  

  浏览器版本可以在设置-关于Chrome中查看

  

  当然,由于浏览器经常会自动更新,所以我们也记得在使用前更新相应的驱动程序。

  基本操作的浏览器仿真

  browser = webdriver.Chrome() # 打开浏览器

driver.maximize_window() # 最大化窗口

browser.minimize_window() # 最小化窗口

url='https://www.bilibili.com/v/popular/rank/all'#以该链接为例

browser.get(url)#访问相对应链接

browser.close#关闭浏览器

  抓取数据 – 网站位置

  以下知识需要一些网络相关知识作为前提

  案例——b站排行榜

  

  假设我们需要爬取上图中红圈内的文本数据,那么我们需要定位到这个地方的点

  定位方法与实践

  定位方式的选择主要取决于目标页面的情况。

  #find_elements_by_xxx的形式是查找到多个元素(当前定位方法定位元素不唯一)

#结果为列表

browser.find_element_by_id('')# 通过标签id属性进行定位

browser.find_element_by_name("")# 通过标签name属性进行定位

browser.find_elements_by_class_name("")# 通过class名称进行定位

browser.find_element_by_tag_name("")# 通过标签名称进行定位

browser.find_element_by_css_selector('')# 通过CSS查找方式进行定位

browser.find_element_by_xpath('')# 通过xpath方式定位

#在chrome中可以通过源代码目标元素右键--Copy--Copy XPath/Copy full XPath

browser.find_element_by_link_text("")# 通过搜索 页面中 链接进行定位

browser.find_element_by_partial_link_text("")# 通过搜索 页面中 链接进行定位 ,可以支持模糊匹配

  在网站的情况下,我们根据类名爬取,标签中的class="info"

  

  from selenium import webdriver

browser = webdriver.Chrome()

# browser.minimize_window() # 最小化窗口

url='https://www.bilibili.com/v/popular/rank/all'

browser.get(url)

info=browser.find_elements_by_class_name('info')

#在目标网站中网站中标题class名称都为"info",所以用elements

for i in info:

print(i.text)

#.text为定位元素底下的所有文本,当然我们也可以获取标签里的东西(用其它函数),如视频链接:

# print(i.find_elements_by_tag_name('a')[0].get_attribute('href'))

  结果

  

  一些可能使用的方法(辅助爬虫/减少反爬)加快网页加载(不加载js、图片等)

  options = webdriver.ChromeOptions()

prefs = {

'profile.default_content_setting_values': {

'images': 2,

'permissions.default.stylesheet':2,

'javascript': 2

}

}

options.add_experimental_option('prefs', prefs)

browser = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=options)

  异常捕获

  from selenium.common.exceptions import NoSuchElementException

  等待加载的网页

  由于网速等问题,进入网站后页面还没有加载,需要等待。

  selenium 自带的加载方式

  from selenium.webdriver.support.wait import WebDriverWait #等待页面加载

wait=WebDriverWait(browser,10) #显式等待:指定等待某个标签加载完毕

wait1=browser.implicitly_wait(10) #隐式等待:等待所有标签加载完毕

wait.until(EC.presence_of_element_located((By.CLASS_NAME,'tH0')))

  等待时间与时间

  import time

time.sleep(2)

  在输入框中输入数据

  ele = driver.find_element_by_id("kw") # 找到id为kw的节点

ele.send_keys("名称") # 向input输入框输入名称

#也可以driver.find_element_by_id("kw").send_keys("名称")

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线