前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python采集库DrissionPage

python采集库DrissionPage

作者头像
用户7138673
发布2022-09-21 11:17:51
2.2K0
发布2022-09-21 11:17:51
举报
文章被收录于专栏:大大的小数据大大的小数据

Xpath遇到一些问题,总是提取不到文本。

DrissionPage进入视野。219个星星不算多。

https://gitee.com/muzi-lee/DrissionPage

https://github.com/g1879/DrissionPage/blob/master/README.zh-cn.md

代码语言:javascript
复制
page = MixPage()  # 创建页面对象,默认driver模式
page.get('https://gitee.com/profile')  # 访问个人中心页面(未登录,重定向到登录页面)


lnk = first_col.ele('text:命令学')# 使用文本内容查找元素 
#ele()返回第一个符合条件的元素,eles()返回所有符合条件的元素列表。
#元素查找超时默认为10秒,你也可以按需要设置。如查询参数是字符串,
#可选'@属性名:'、'tag:'、'text:'、'css:'、'xpath:'方式。无控制方式时默认用text方式查找。
# 根据xpath或css selector查找
page.eles('xpath://div[@class="ele_class"]')  page.eles('css:div.ele_class')
page.ele('search text')  # 查找包含传入文本的元素 


# 获取元素文本
text = lnk.text  
# 操作元素
element.click()  
# 点击元素
element.input(text)  
# 输入文字
element.run_script(js)  
# 运行js
element.submit()  
# 提交表单
element.clear()  
# 清空元素

self.ele(f'xpath:{self.xpath_下一页}').click() #点击下一页

# 操作页面

print(page.html)  
# 页面源代码
page.run_script(js)  
# 运行js语句
page.close_other_tabs(num)  
# 关闭其它标签页
page.to_iframe(iframe)  
# 切入iframe
page.screenshot(path)  
# 页面截图
page.scrool_to_see(element)  
# 滚动直到某元素可见

# 切换模式
page.change_mode() # 切换到session模式

href = lnk.attr('href')  # 获取元素属性值
在这里坑了一个下午:)

1、获得一级页面和内容

代码语言:javascript
复制
p = MixPage('s')
#p = MixPage()
#循环获得一级页面
for i in range(1,3):
    print(i)
    p.get('https://BB%BA%E9%80%A0%E5%B8%88%E5%B8%82%E6%94%BF&page='+str(i))

    #搜索一级页面的内容和URL
    lnk = p.eles('@class:posName')  # 使用文本内容查找元素 职位名称
#    companys = p.eles('@class:w2') #公司名称
    companys = p.eles('@class:entName')
    money = p.eles('@class:w3') #薪资
#    money = p.eles('000') #薪资
    workplace = p.eles('@class:w4') #工作地点
    update_time = p.eles('@class:w5') #更新时间

2、获得二级页面和内容

代码语言:javascript
复制
    for i in range(0,len(lnk)): #遍历url
        print(lnk[i].text,end='')
        print(companys[i].text,end='')
        print(money[i].text,end='')
        
        href = lnk[i].attr('href')  # 获取元素属性值
        p.get(href) #进入二级页面
        
        sleep(1)
        
        salary = p.ele('@class:salary') #薪资
#        Job_responsibilities = p.ele('岗位职责')
        Job_responsibilities = p.ele('@id:examineSensitiveWordsContent') #职位描述
        phone = p.ele('联系电话')
        company_address = p.ele('联系地址') #联系地址
        ent_name = p.ele('@class:ent-name') #ent-name
        Contact_address = p.ele('@class:address') #address

3、内容写入CSV

代码语言:javascript
复制
        #写入csv
        with open('广西.csv', 'a+', newline = '\n')as f:
            w = csv.writer(f)
            w.writerow([datetime.date.today() #写入当前日期
                        ,lnk[i].text
                        ,companys[i].text
                        ,money[i].text
                        ,workplace[i].text
                        ,update_time[i].text
                        ,salary.text
                        ,Job_responsibilities.text
                        ,phone.text
                        ,company_address.text
                        ,ent_name.text
                        ,Contact_address.text
                        ,href
                        ])

4、读取csv,判断出现次数和区域。使用了字典方法,累计出现次数填入字典。

代码语言:javascript
复制
import csv

with open('广西.csv', 'r', newline = '\n')as f:
    reader = csv.reader(f)
    dict = {}
    for row in reader:
         dict[row[2]]=dict.get(row[2],0)+1

for x,y in dict.items():
    print(y)
    if y == 1:
        print(x,y)
        if 'xx区' in row[9]:
            print(row[9])

5、发邮件推送

代码语言:javascript
复制
#发邮件
        import yagmail
        yag_server = yagmail.SMTP(user='41710@qq.com', password='gewuhxbjcd', host='smtp.qq.com',encoding='GBK')
        email_to = ['165841@qq.com']
        import datetime
        t = datetime.date.today()
        email_title = x
        email_content = row[12]
        yag_server.send(email_to, email_title, email_content)
        yag_server.close()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大大的小数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档