当前位置: 首页 > news >正文

22爬虫:使用Drission Page的两个案例

案例一:使用DrissionPage抓取BOSS上的招聘信息

使用requests获取BOSS网站上的内容是非常困难的,但是通过网页自动化工具DrissionPage或者是Playwright或者是Seleenium是非常容易的,接下来我们就给出使用DrissionPage爬取BOSS网站python招聘的信息,仅供学习参考。

import time
from DrissionPage import Chromium
import pandas as pd

page = Chromium().latest_tab # 打开一个标签页,并让该标签页访问BOSS直聘
page.listen.start('https://www.zhipin.com/wapi/zpgeek/search/joblist.json') # 监听对应的能够返回数据的Ajax请求(监听可以放在访问页面之前也可以放在访问页面之后)
page.get('https://www.zhipin.com/yantai/?ka=header-home') # 访问BOSS直聘

page.ele('xpath=//p[@class="ipt-wrap"]/input').input('python')
page.ele('xpath=//button[@class="btn btn-search"]').click()

res = page.listen.wait() # 获取监听到的Ajax请求的响应
print('res:::',res.response.body)
joblist = res.response.body['zpData']['jobList']

for i in range(10):
    next_btn = page.ele("xpath=//div[@class='options-pages']/a/i[@class='ui-icon-arrow-right']")
    next_btn_a = next_btn.parent().attr('class') # 取出next_btn标签父标签的class属性

    if 'disabled' not in next_btn_a:
        next_btn.click()
        time.sleep(2)
        print('爬虫中---')
        res = page.listen.wait()
        joblist += res.response.body['zpData']['jobList']
    else:
        print('爬虫结束')

# 数据保存
df = pd.DataFrame(joblist)
df.to_excel('boss直聘.xlsx', index=False)

page.close()

 在上述的程序中,我们使用DrissionPage种自带的监听技术获取Ajax相应数据。分析BOSS网站返回的数据,发现他是Ajax请求,当让页不可以使用监听技术,直接等待页面加载完毕之后定位元素所在的位置即可。

程序运行过程中可能会出现卡在某一个页面不动了,需要我们手动点击下一页(人工接管一下再程序接管)才可以正常运行。

案例二:使用DrissionPage破解瑞数

使用requests破解瑞数是非常困难的,我们接下来仍然使用DrissionPage获取相应的数据,本代码仅供大家参考学习。

from DrissionPage import Chromium,ChromiumOptions
import time,random

# 定义一个方法用于获取某个网页的内容
def get_url_content(page): # 传入的对象是一个页面对象
    li_s = page.eles('xpath=//div[@class="pd0-20"]/ul/li')
    for li in li_s:
        title = li.ele('xpath=./a[@class="dy_title"]').text  # 取出标题
        content = li.ele('xpath=.//p[@class="neirong"]').text  # 取出内容
        print(title)
        print(content)
        print('==========================================')

options = ChromiumOptions()
options.auto_port()

browser = Chromium(options)
page = browser.latest_tab

page.get(url='https://sugh.szu.edu.cn/Html/News/Columns/7/Index.html',retry=3,timeout=15,interval=3)
get_url_content(page) # 获取第一页的page内容

next_btn = page.ele('xpath=//a[@class="pagination_nextpage ui-state-default ui-corner-all"]')

# 翻页爬取
while next_btn.attr('href'):
    next_btn.click()
    time.sleep(random.randint(3, 5))  # 设置一个等待网页加载的时间
    print('正在爬取下一页-----------------------------------------------------------------------------------')
    get_url_content(page)  # 获取下一页的page内容
    next_btn = page.ele('xpath=//a[@class="pagination_nextpage ui-state-default ui-corner-all"]')
print('爬虫结束')

page.close()

'''
pagination_nextpage ui-state-default ui-corner-all
pagination_lastpage ui-state-default ui-corner-all
'''

相关文章:

  • 网络安全高级软件编程技术
  • Java八股文(下)
  • Mac安装配置Tomcat 8
  • C++栈与队列:数据结构的“单行道”与“流水线
  • QML Component 与 Loader 结合动态加载组件
  • ES6相关操作
  • Typora的Github主题美化
  • 代码随想录算法训练day59---图论系列4
  • 认识HTML的标签结构
  • OpenCV机器学习(8)随机森林(Random Forests)算法cv::ml::RTrees类
  • 美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
  • Github 2025-02-20 Go开源项目日报 Top10
  • GCC编译器(含预处理/编译/汇编/链接四阶段详解)
  • 《耀百岁中医养生平台的技术革命——千年中医的智能觉醒》
  • 【网络编程】服务器模型(一):循环服务器模型和并发服务器模型(多进程)
  • Windows 10操作系统上安装PHP
  • Qt编写守护进程
  • cursor使用记录
  • 第五章 起航11 文章发表
  • 国产编辑器EverEdit - 语法着色及嵌入式多语言着色
  • 呼和浩特市手机网站/免费建网站
  • 刷钻业务推广网站/百度智能建站系统
  • 关于政府网站建设实施方案/深圳刚刚突然宣布
  • 中文设置wordpress/绍兴seo外包
  • wordpress破解key/百度seo排名培训 优化
  • 如何利用网站模板做网站/厦门seo怎么做