爬虫笔记——拉勾网职位信息爬取(selenium方法)

本文介绍了使用Selenium爬取拉勾网Python职位信息的过程,包括构造爬虫框架、处理动态加载、模拟翻页、数据保存及应对登录和网页崩溃的策略。代码示例中详细说明了如何在遇到登录需求和网页崩溃时继续爬取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文中内容为网上找的视频课程的练习,但是不清楚具体课程名称(课程第一句为hello,欢迎学习爬虫课程,知道的可以评论告知),这里首先感谢课程制作者及课程分享者,让小白学会一个新的有用的技能!

在拉勾网的爬虫过程中,由于反爬虫机制,requests方法爬取尝试失败,故尝试采用selenium爬取职位信息,以python职位信息为例(拉勾网搜索python):
在这里插入图片描述
具体职位信息:
在这里插入图片描述
切换页面可以发现网站职位信息为ajax动态加载的,且是post请求,如下:
在这里插入图片描述

初步爬虫框架构造

下面采用selenium进行爬虫,首先构造一下爬虫的框架,将整个程序构造为一个类,其中主要包括:获取每个详细职位信息的链接(parse_page_url)、请求/关闭详细职位信息页面(request_detail_page)、获取详细职位信息(parse_detail_page),程序中更加细致的部分则在具体过程中依据具体问题再行添加,即为如下形式:

class lagouspider():
    def __init__(self):
        pass
    
    def run(self):
        pass
    
    def parse_page_url(self):
        pass
    
    def request_detail_page(self):
        pass
    
    def parse_detail_page(self):
        pass
    
def main():
    lagou = lagouspider()
    lagou.run()
    
main()

第一页职位信息爬取

首先构造浏览器,然后打开网址(“https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=”),通过parse_page_url获取详细职位信息页面的网址。

要获取每个详情页面的链接,即parse_page_url部分,f12检查可以看到具体的链接网址在href属性中,这里选择使用xpath解析(//a[@class=“position_link”]/@href):
在这里插入图片描述
完成后则打开具体网址进行详细职位信息的爬取(parse_detail_page):
在这里插入图片描述
具体的根据想要爬取的内容添加就行,详细页面爬取完成后则需要关闭详细页面且回到上一个网页窗口,这里让程序暂停一秒,以免爬取过快被识别,同样在切换详情页面网址的时候也让其暂停一秒。

那么截至目前为止,可以得到大概如下的框架:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from lxml import etree
import time
import re

class lagouspider():
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.url = "https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
        # 定义一个列表存储爬取的职位信息
        self.positions = []
    
    def run(self):
        # 打开网页
        self.driver.get(self.url)
        # 等待网页加载完毕再返回源码(下一页按钮)
        WebDriverWait(self.driver,timeout=10).until(EC.presence_of_element_located((By.XPATH,'//div[@class="pager_container"]/span[last()]')))
        # 获取网页源代码
        source = self.driver.page_source
        # 获取详细职位信息网址
        self.parse_page_url(source)
    
    def parse_page_url(self,source):
        html = etree.HTML(source)
        detail_links = html.xpath('//a[@class="position_link"]/@href')
        for link in detail_links:
            # 打开详细职位信息网址
            self.request_detail_page(link)
            # 暂停一秒,以免爬取过快
            time.sleep(1)
    
    def request_detail_page(self,url):
        # 新建一个窗口,打开详细页面
        self.driver.execute_script("window.open('%s')"%url)
        # 切换到详情页面窗口
        self.driver.switch_to_window(self.driver.window_handles[1])
        # 等待页面加载完毕再返回源码
        WebDriverWait(self.driver,timeout=10).until(EC.presence_of_element_located((By.XPATH,'//span[@class="name"]')))
        page_source = self.driver.page_source
        self.parse_detail_page(page_source)
        # 暂停一秒,防止爬取过快
        time.sleep(1)
        # 关闭挡墙详情页面,并回到上一个页面窗口
        self.driver.close()
        self.driver.switch_to_window(self.driver.window_handles[0])
    
    def parse_detail_page(self,source):
        html = etree.HTML(source)
        # 根据具体需要添加
        company_name = html.xpath("//em[@class='fl-cn']/text()")[0].strip()
        position_name = html
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值