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�造师市政&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()