修改后的代码如下:

import time
import requests
from bs4 import BeautifulSoup
import csv

url = 'https://search.51job.com/list/010000,020000,030200,040000,180200,000000,0000,00,9,99,Python,2,{page}.html'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48'
}

def get_data(page):
    response = requests.get(url=url.format(page=page), headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    job_list = soup.select('.dw_table .el')
    for job in job_list:
        title = job.select_one('.t a')['title']
        company_name = job.select_one('.t span')['title']
        money = job.select_one('.sal').get_text().strip()
        job_welf = job.select_one('.info .t3').get_text().strip()
        area = job.select_one('.info .t4').get_text().strip()
        exp_edu = job.select_one('.info .t5').get_text().strip().split('|')
        exp = exp_edu[0].strip()
        edu = exp_edu[1].strip()
        company_type = job.select_one('.info .t2').get_text().strip()
        date = job.select_one('.info .t6').get_text().strip()
        href = job.select_one('.t a')['href']
        dit = {
            '职位名字': title,
            '公司名字': company_name,
            '薪资': money,
            '公司福利': job_welf,
            '地区': area,
            '经验': exp,
            '学历': edu,
            '公司类型': company_type,
            '发布日期': date,
            '详情页': href,
        }
        yield dit

with open('数据.csv', mode='a', encoding='utf-8', newline='') as f:
    csv_writer = csv.DictWriter(f, fieldnames=[
        '职位名字',
        '公司名字',
        '薪资',
        '公司福利',
        '地区',
        '经验',
        '学历',
        '公司类型',
        '发布日期',
        '详情页',
    ])
    csv_writer.writeheader()
    for page in range(1, 11):
        for item in get_data(page):
            csv_writer.writerow(item)
            print(item)
            time.sleep(1)

修改说明:
1. 在请求url时,使用.format()方法将页码page插入到url中。
2. 修改了获取response的方法,使用requests.get()方法获取response。
3. 修改了获取职位信息的方法,使用select_one()方法获取元素,避免了提取出错。

更多爬虫技巧:

  • 可以使用代理服务器来避免被网站封禁。
  • 使用BeautifulSoup库来解析HTML网页,提取所需数据。
  • 可以使用Selenium库来模拟浏览器行为,解决一些需要动态加载内容的网站的爬取问题。
  • 爬取网站数据时,请务必遵守网站的robots协议,避免对网站造成过大的负荷。
  • 注意爬取数据的合法性和用途,避免违反法律法规。
Python 爬虫代码无法正确获取 51job 数据,如何修改?

原文地址: https://www.cveoy.top/t/topic/nx7s 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录