python使用selenium爬取boos,100%爬取成功,绕过cookie

        selenium也可用于爬虫,有时它比request库要强,这里我们就爬取boos招聘网站,爬过的同学就知道boos的反爬很难,如果不是大佬级别的人,很难攻克它的反爬机制,boos的cookie好像是每隔几分钟就失效,它一直在变,非常的烦,使用selenium能很好的绕过他的这个反爬机制。

这里可能有一些地方表达不是太清楚或者有误,还请多多包涵

首先安装selenium库

pip install selenium

查看自己电脑上的浏览器版本

谷歌浏览器:设置 -> 关于Chrome就可以看到谷歌浏览器的版本

 接下来就需要下载自己电脑上所对应的浏览器版本,下面是下载链接

谷歌

火狐

如果在下载过程中有什么疑问的可在留言区问我

把下载好的浏览器驱动放在py文件同级目录下

 1、导入所需要的模块

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import csv

2、打开浏览器

# 打开谷歌驱动
driver = webdriver.Chrome()
# 打开火狐驱动, 下载的是哪个驱动就用所对应的驱动名打开,这里我使用的是谷歌
# driver = webdriver.Firefox()
# 输入需要搜索的网址,这里直接输入boos的首页网址,也可以根据自己的需要来输入对应的网址,修改括号中的网址即可
driver.get("https://www.zhipin.com/")

 3、在输入框中输入想要搜索的内容

F12检查,用小箭头定位到输入框,查看input的class属性值

定位一个元素定位多个元素含义
find_element_by_idfind_elements_by_id通过元素id定位
find_element_by_namefind_elements_by_name通过元素name定位
find_element_by_xpathfind_elements_by_xpath通过xpath表达式定位
find_element_by_link_textfind_elements_by_link_tex通过完整超链接定位
find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分链接定位
find_element_by_tag_namefind_elements_by_tag_name通过标签定位
find_element_by_class_namefind_elements_by_class_name通过类名进行定位
find_elements_by_css_selectorfind_elements_by_css_selector通过css选择器进行定位

 send_keys()是模拟键盘输入

find_element_by_css_selector()就是类似于把鼠标放到某处,这里是把鼠标放到输入框中。
# 输入搜索内容
driver.find_element_by_css_selector(".ipt-search").send_keys("python")

全自动,不需要自己输入

4、查看搜索内容

# # 模拟回车键
driver.find_element_by_css_selector(".ipt-search").send_keys(Keys.ENTER)

 

 这里需要设置 driver.implicitly_wait(10) 等待10秒, 否则会报错。

# implicitly_wait(): 隐式等待
# 当使用了隐士等待执行测试的时候,如果
# WebDriver没有在
# DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
# 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找
# DOM,默认的时间是0
# 一旦设置了隐式等待,则它存在整个
# WebDriver
# 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,
# 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。
driver.implicitly_wait(10)

 拿到属性名为job-list下面的每一个li,这里需要注意elements是加s的,因为是获取多个所以需要加s,如果是单个就直接使用element即可。


lis = driver.find_elements_by_css_selector(".job-list li")
print(lis)

这里我们爬取下图中圈起来的信息

for li in lis:
    # print(li)
    title = li.find_element_by_css_selector(".job-name").text   #岗位名称
    位置 = li.find_element_by_css_selector(".job-area").text
    薪资 = li.find_element_by_css_selector(".red").text
    经验 = li.find_element_by_css_selector(".job-limit p").text
    company = li.find_element_by_css_selector(".company-text .name a").text  #公司名称
    commpany_type = li.find_element_by_css_selector(".company-text p a").text    #公司分类
    print(title, 位置, 薪资, 经验, company, commpany_type)

接下来就是保存信息,我使用的是csv保存,在导入库的代码后输入如下代码

f = open("boos直聘.csv", "w", encoding="utf-8", newline="")
csv.writer(f).writerow(["职位", "位置", "薪资", "经验", "公司名", "类型"])

写入csv

csv.writer(f).writerow([title, 位置, 薪资, 经验, company, commpany_type])

参考文章:Python Selenium库的使用

代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import csv

f = open("php_boos直聘.csv", "w", encoding="utf-8", newline="")
csv.writer(f).writerow(["职位", "位置", "薪资", "经验", "公司名", "类型"])

# 打开谷歌驱动
driver = webdriver.Chrome()
# 打开火狐驱动, 下载的是哪个驱动就用所对应的驱动名打开,这里我使用的是谷歌
# driver = webdriver.Firefox()
# 输入需要搜索的网址,这里直接输入boos的首页网址,也可以根据自己的需要来输入对应的网址,修改括号中的网址即可
driver.get("https://www.zhipin.com/")


# 输入搜索内容
driver.find_element_by_css_selector(".ipt-search").send_keys("php")

#
# # 模拟回车键
driver.find_element_by_css_selector(".ipt-search").send_keys(Keys.ENTER)

# 搜索全国
driver.find_element_by_link_text("全国").click()

# 回车搜索
driver.find_element_by_css_selector(".ipt-search").send_keys(Keys.ENTER)
# driver.find_element_by_css_selector("#btn btn-search")


# implicitly_wait(): 隐式等待
# 当使用了隐士等待执行测试的时候,如果
# WebDriver没有在
# DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
# 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找
# DOM,默认的时间是0
# 一旦设置了隐式等待,则它存在整个
# WebDriver
# 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,
# 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。
driver.implicitly_wait(10)


def index():
#     # 获取所有的li标签
    lis = driver.find_elements_by_css_selector(".job-list li")
    # print(lis)
    for li in lis:
        # print(li)
        title = li.find_element_by_css_selector(".job-name").text
        位置 = li.find_element_by_css_selector(".job-area").text
        薪资 = li.find_element_by_css_selector(".red").text
        经验 = li.find_element_by_css_selector(".job-limit p").text
        company = li.find_element_by_css_selector(".company-text .name a").text
        commpany_type = li.find_element_by_css_selector(".company-text p a").text
        print(title, 位置, 薪资, 经验, company, commpany_type)
        csv.writer(f).writerow([title, 位置, 薪资, 经验, company, commpany_type])


for j in range(10):
    index()
    driver.find_element_by_css_selector(".next").click()
driver.quit()

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值