Python 爬虫代码无法正确获取 51job 数据,如何修改?
修改后的代码如下:
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协议,避免对网站造成过大的负荷。
- 注意爬取数据的合法性和用途,避免违反法律法规。
原文地址: https://www.cveoy.top/t/topic/nx7s 著作权归作者所有。请勿转载和采集!