学习爬虫day05

本文介绍了Python爬虫时如何使用Selenium库,包括设置窗口大小、发送请求、页面截屏和元素定位等操作。还强调了减少请求次数、多伪装以及利用多线程分布式提高爬取效率的策略。对于验证码处理,讨论了两种情况:不变和变化的验证码,提出了相应的解决方法,如利用session和Selenium结合处理。
摘要由CSDN通过智能技术生成

写爬虫代码

  • 尽量减少请求次数
    • 1.能找列表页就不抓详情页
    • 2.保存获取到的html页面,供差错和重复请求使用
  • 关注网站的所有类型的页面
    • 1.wap页面,触屏版页面
    • 2.H5页面
    • 3.APP
  • 多伪装
    • 1.动态的UA
    • 2.代理ip
    • 3.不使用cookie
  • 利用多线程分布式
    • 在不被ban的请求下尽可能的提高速度

selenium使用

  • 导入
    from selenium import webdriver

  • 实例化浏览器

    • driver = webdriver.Chrome()
  • 设置窗口大小

    • driver.set_window_size(1920,1080)
    • driver.maximize_window() ## 最大化窗口
  • 发送请求

    • driver.get()
  • 页面截屏

    • driver.save_screenshot(路径)
  • 获取cookies

    • driver.get_cookies()
  • 关闭浏览器/页面

    • driver.quit() - 关闭浏览器
    • driver.close() - 关闭当前页面
  • 元素定位

    • driver.find_element_by_id()
      • 根据id找到元素或内容
    • driver.find_element_by_class_name()
      • 根据classname找到元素或内容
    • driver.find_elements_by_xpath()
      • 根据xpath获取元素,elements是列表
    • (element).text
      • 获取文本element元素的
  • 获取元素属性

    • 定位元素.get_attribute(属性名)
  • 没有获取到定位的属性的时候使用下面的定位方式会报错

    • element_by_x
  • 使用elements_by_x :则不会报错

  • 定位链接,获取完整的url

    • find_element_by_link_text(链接文本)
    • find_element_by_partial_link_text(链接的部分文本)

selenium使用注意点

  • 获取文本和获取属性

    • 先定位到元素,然后调用.text或者get_attribute方法来获取
  • selenium 获取到的数据elements的内容

  • find_element和find_elements的区别

    • find_element:返回一个element,如果没有会报错
    • find_elements:返回一个列表,没有就是一个空列表
    • 在判断是否有下一页的时候,使用find_elements来根据结果的列表长度来判断
  • 如果页面中含有iframe、frame,需要先调用driver.switch_to.frame的方法切换到frame中才能定位

    • 传递参数,frame的id/name/webelement元素
  • selement请求第一页的时候回等待页面加载完了之后再获取数据,再点击翻页完了之后会直接获取数据,此时可能会报错,应为数据没有加载完,需要使用time.sleep()让程序睡几秒

  • selenium中find_element_by_class_name只能接受一个cass对应的值,不能传入多个

验证码识别

  • url不变,验证码不变

    • 请求验证码,获得相应,识别
  • url不变,验证码会变

    • 思路: 对方服务器返回验证码的时候,会和每个用户的信息和验证码进行一个对应,之后,在用户发送post请求的时候,会对比post请求中发送的验证码和挡墙用户真正的存储字啊服务器端的验证码是否相同

    • 1.实例化session

    • 2.请求session请求登录页面,获取验证码的地址

    • 3.使用session请求验证码,识别

    • 4.使用session发送post请求

  • 使用selenium登录,遇到验证码

    • url不变,验证码不变,同上
    • url不变,验证码会变
      • 1.selenium请求登录页面,同时拿到验证码
      • 2.获取登录页面中driver中的cookie,交给requests模块发送验证码请求,识别
      • 3.输入验证码,点击登录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值