Python 크롤러 실전, 요청+시간 모듈, 모집 사이트의 데이터 크롤링 및 csv 파일 저장(소스 코드 포함)

머리말

오늘 소개해드릴 내용은 Python이 채용사이트의 데이터를 크롤링하여 로컬에 저장한다는 것인데요, 여기서 코드가 필요한 친구들에게 코드를 주고, 팁을 좀 드리고자 합니다.

우선 크롤링을 하기 전에 크롤러로 인식하지 않고 최대한 브라우저인 척을 해야 합니다 기본적인 것은 요청 헤더를 추가하는 것이지만 이런
평문 프록시 IP 변경을 고려하고 무작위로 요청 헤더를 교체하여 채용 웹사이트 데이터를 크롤링합니다.

매번 크롤러 코드를 작성하기 전에 가장 중요한 첫 번째 단계는 웹 페이지를 분석하는 것입니다.

분석을 통해 크롤링 과정에서 크롤링 속도가 상대적으로 느리다는 것을 알았으므로 Google 브라우저 이미지, JavaScript 등을 비활성화하여 크롤러의 크롤링 속도를 향상시킬 수도 있습니다.

신병 모집

개발 도구

파이썬 버전: 3.8

관련 모듈:

요청 모듈

CSV 모듈

시간 모듈

코드

환경 빌드

Python을 설치하고 환경 변수에 추가하면 pip가 필요한 관련 모듈을 설치합니다.

아이디어 분석

브라우저에서 크롤링하려는 페이지를 엽니다.
F12를 눌러 개발자 도구에 들어가 원하는 채용 데이터가 어디에 있는지 확인합니다.
페이지 데이터가 필요합니다.

소스 코드 구조

암호

f = open('招聘数据.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '地区',
    '公司名字',
    '薪资',
    '学历',
    '经验',
    '公司标签',
    '详情页',
])

csv_writer.writeheader() # 写入表头
for page in range(1, 31):
    print(f'------------------------正在爬取第{
      
      page}页-------------------------')
    time.sleep(1)
    # 1. 发送请求
    #url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
    url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
    # headers 请求头 用来伪装python代码, 防止被识别出是爬虫程序, 然后被反爬
    # pycharm里面 先全部选中 按住 ctrl +R 用正则表达式命令 批量替换数据
    # cookie: 用户信息, 常用于检测是否有登陆账号
    # referer: 防盗链, 告诉服务器我们请求的url地址 是从哪里跳转过来的 (动态网页数据 数据包 要比较多)
    # user-agent: 浏览器的基本标识
    headers = {
    
    
        'cookie': '你的Cookie',
        'referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
    }
    data = {
    
    
        'first': 'false',
        'pn': page,
        'kd': 'python',
        'sid': 'bf8ed05047294473875b2c8373df0357'
    }
    # response 自定义变量 可以自己定义  <Response [200]> 获取服务器给我们响应数据
    response = requests.post(url=url, data=data, headers=headers)
    # 200 状态码标识请求成功
    # print(response.text) # 获取响应体的文本数据 字符串数据类型
    # print(type(response.text))
    # print(response.json()) # 获取响应体的json字典数据 字典数据类型
    # print(type(response.json()))
    #  2. 获取数据
    # print(response.json())
    # pprint.pprint(response.json())
    #  3. 解析数据 json数据最好解析 非常好解析, 就根据字典键值对取值
    # 根据冒号左边的内容, 提取冒号右边的内容
    result = response.json()['content']['positionResult']['result']
    # 列表数据类型, 但是这个列表里面的元素, 是字典数据类型
    # pprint.pprint(result)
    # 循环遍历  从 result 列表里面 把元素一个一个提取出来
    for index in result:
        # pprint.pprint(index)
        # href = index['positionId']
        href = f'https://www.lagou.com/jobs/{
      
      index["positionId"]}.html'
        dit = {
    
    
            '标题': index['positionName'],
            '地区': index['city'],
            '公司名字': index['companyFullName'],
            '薪资': index['salary'],
            '学历': index['education'],
            '经验': index['workYear'],
            '公司标签': ','.join(index['companyLabelList']),
            '详情页': href,
        }
        # ''.join() 把列表转成字符串 '免费班车',
        csv_writer.writerow(dit)
        print(dit)

그림과 같이 쿠키를 얻는 방법

쿠키

결과 표시

결과 표시

마침내

독자들에게 감사의 마음을 전하기 위해, 모든 독자들에게 보답하고 도움이 되기를 바라며 최근에 제가 가장 좋아하는 프로그래밍 드라이 굿즈를 여러분과 공유하고 싶습니다.

초보자에게 적합한 실용적인 Python 튜토리얼이 있습니다~

Xiaoyu와 함께 성장하세요!

① 100개 이상의 PythonPDF(주류 및 고전 서적 사용 가능)

② Python 표준 라이브러리(가장 완벽한 중국어 버전)

③ Reptile 프로젝트 소스 코드(40~50개의 흥미롭고 고전적인 수작업 프로젝트 및 소스 코드)

④ 파이썬 기초, 크롤러, 웹 개발, 빅데이터 분석 동영상 (초보자에게 적합)

⑤ 파이썬 학습 로드맵(영향력 있는 학습과 작별)

추천

출처blog.csdn.net/Modeler_xiaoyu/article/details/128249283