爬虫实战——拉勾网

简介: 闲来无事,想看看拉勾上关于的Python的招聘信息于是。。。爬下来呗话不多说,直接开始不对,首先还是说一下主要使用到的技术栈,这里我没有使用requests库,而是使用selenium爬的why ?我喜欢呗~seleniu...

闲来无事,想看看拉勾上关于的Python的招聘信息

于是。。。爬下来呗

  • 话不多说,直接开始

不对,首先还是说一下主要使用到的技术栈,这里我没有使用requests库,而是使用selenium爬的

  • why ?

我喜欢呗~

  • selenium爬虫原理

其实原理也没啥好说的,和平时爬虫的时候原理都是一样的,就是模拟浏览器上网呗

  • 分析:

其实,拉勾网是非常好爬的,首先进入拉勾网(www.lagou.com),并搜索python 回车

img_abe20ea0fd767b65863c1f15094a6e0f.png
拉勾网搜索python
img_26e92a43f6929ef3694201b30a904993.png
拉勾网搜索python

为什么说拉勾网好爬,原因之一在图中我已经标注出来了,就是不需要登录,原因之二请见下文

在chrome浏览器按f12,查看网页源码

img_d496a05aa7a4447588ca5175e35359eb.png
浏览器查看F12

此时会发现,Network下什么都没有,那是因为没有请求,此时,需要再此刷新页面,就会有了

img_698445adf51dbec6b148714cdc57ab5b.png
Network

注意此时,我们选择箭头所指的位置,这里的数据是通过ajax发送过来的,这里就说一下,拉勾网容易爬的原因之二,因为所有的数据在ajax里都能找到,只需要爬去这里的json数据就行了,但是我没有这样做,因为不屑于(装)这么爬(B),开头就说了这次爬虫使用的是selenium,所以需要分析网页的html。因此,这里的数据不是重点,我们看网页

img_ea9cf0e1ef0c28b3d246b9d98d4a4c7b.png
Elements

点击Elements,查看网页源码,再点击左上角的小箭头(我标注的红色小箭头)所指的按钮,再选中网页中的元素,即可快速定位到该元素所在的源码位置,到此时,其实我们已经找到想爬数据的所在位置了,在代码中使用selenium自带的xpath解析出来就可以了,接下来就是代码实现了

  • 话不多说直接上源码:
import json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time


class Lagou(object):
    def __init__(self, search_name):
        self.start_url = "https://www.lagou.com/jobs/list_{}?px=default&city=%E5%8C%97%E4%BA%AC#filterBox"
        self.search_name = search_name
        self.chrome_options = Options()
        self.chrome_options.add_argument('--headless')
        self.driver = webdriver.Chrome(chrome_options=self.chrome_options)
        self.content_header = ["positionName", "businessZones", "CreateTime", "companyShortName", "salary", "workYear"]

    def get_content_list(self):  # 提取数据
        li_list = self.driver.find_elements_by_xpath('//li[contains(@class, "con_list_item")]')
        content_list = []
        for li in li_list:
            item_list = []
            item_list.append(li.find_element_by_tag_name("h3").text)
            item_list.append(li.find_element_by_tag_name("em").text)
            item_list.append(li.find_elements_by_xpath(".//span[@class='format-time']")[0].text)
            item_list.append(li.find_elements_by_xpath(".//div[@class='company_name']")[0].text)
            item_list.append(li.find_elements_by_xpath(".//span[@class='money']")[0].text)
            item_list.append(li.find_elements_by_xpath(".//div[@class='li_b_l']")[0].text)

            # print(item_list)
            content_list.append(item_list)

        # 下一页
        next_url = self.driver.find_elements_by_xpath("//span[@class='pager_next ']")
        next_url = next_url[0] if len(next_url) > 0 else None
        return content_list, next_url

    def save_content_list(self, content_list):
        with open(self.search_name + "_data.csv", "a", encoding='utf-8') as f:
            for content in content_list:
                print(content)
                for item in content:
                    if isinstance(item, str):
                        if ',' in item:
                            item.replace(",", "|")
                    f.write(item + ",")
                f.write('\n')

    def run(self):
        # 发送请求
        self.driver.get(self.start_url.format(self.search_name))

        # 提取数据
        content_list, next_url = self.get_content_list()

        # 保存数据
        self.save_content_list(content_list)

        # 翻页
        while next_url is not None:
            next_url.click()
            time.sleep(6)
            content_list, next_url = self.get_content_list()
            self.save_content_list(content_list)


if __name__ == '__main__':
    lagou = Lagou("python")
    lagou.run()
    # 翻页

因为大多数时候,我们爬数据都是有目的的,在这里,我将数据转化成了csv格式保存的,只需要按需修改即可啦。

源码中,是将爬去下来的数据保存在文件中,这个文件被保存在当前的项目路径下,亦可按需修改

另外,我在最后又将源码进行修改,通过分析网页的url,发现搜索关键词可以在url中修改,因此这里使用了format将其扣出,只需要在实例化对象的时候,传入想搜索的关键词即可爬取到相关的职位

写在最后:

通过这次爬虫,虽然很慢。但是不得不承认,selenium更像是在模拟人真实的操作浏览器查看网页,因此此种方法不易被反爬虫发现,但是是真的慢(用requests爬去json数据,450条同样的数据大概只需要30秒,而我用这种方案足足花了5分钟)

另外,selenium还有很多其他玩法,感兴趣的朋友,不妨开发脑洞,玩一下

好吧,暂时就说这么多,有空再聊,peace~


微信公众号:TechBoard
个人博客:www.limiao.tech

目录
相关文章
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
147 6
|
3月前
|
数据采集 JSON 算法
Python爬虫——基于JWT的模拟登录爬取实战
Python爬虫——基于JWT的模拟登录爬取实战
86 1
Python爬虫——基于JWT的模拟登录爬取实战
|
4月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
1月前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
5月前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
3月前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
226 66
|
2月前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
142 6
|
2月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
120 4
|
3月前
|
数据采集 JSON 前端开发
JavaScript逆向爬虫实战分析
JavaScript逆向爬虫实战分析
51 4
|
3月前
|
数据采集 前端开发 NoSQL
Python编程异步爬虫实战案例
Python编程异步爬虫实战案例
90 2