Python2使用Bs4解析腾讯社招页面并存储为Json
本文介绍如何使用Python2结合Bs4库解析腾讯社招页面,提取职位名称、类别、人数、地点及发布时间等关键信息。重点解决Python列表直接写入Json文件时中文乱码问题,通过序列化及UTF-8编码确保数据正确存储,最终将结果保存为Json格式文件供后续使用。
腾讯社招数据抓取目标
本次任务的目标是获取腾讯社招特定页面中的职位名称及其对应的超链接,同时提取职位类别、招聘人数、工作地点以及发布时间等关键数据。
Bs4解析与Json存储方案
技术实现上,要求使用Bs4库进行HTML解析,并将提取到的结构化数据以Json文件的形式进行持久化存储。
中文编码与文件写入注意事项
需要特别注意编码问题:若直接将Python列表写入Json文件,可能导致中文内容无法正确写入。因此,必须对数据进行序列化操作,并采用UTF-8编码格式写入文件,以确保中文数据的完整性和可读性。
Python2实现代码示例
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup as bs
import json
url = 'https://hr.tencent.com/position.php?'
params = {
'start':'10'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# 获取腾讯社招某个页面的页面源码
html = requests.get(url, params = params, headers = headers).text
# 创建soup对象,使用lxml解析器
soup = bs(html,'lxml')
# 选取类名为odd和even的tr标签
result1 = soup.select('tr[class="odd"]')
result2 = soup.select('tr[class="even"]')
# 列表拼接 l = [1,2] + [3,4],则列表l为[1,2,3,4]
result = result1 + result2
# 把数据存放在列表里面,列表的每个元素都为一个字典
l = []
data = {}
for item in result:
# 获取标签的文本内容
job = item.find_all('a')[0].get_text().encode('utf-8')
category = item.find_all('td')[1].get_text().encode('utf-8')
number = item.find_all('td')[2].get_text().encode('utf-8')
address = item.find_all('td')[3].get_text().encode('utf-8')
public_time = item.find_all('td')[4].get_text().encode('utf-8')
# 获取标签的属性值
link = item.find_all('a')[0].attrs['href']
fulllink = ('https://hr.tencent.com/' + link).encode('utf-8')
data['job'] = job
data['category'] = category
data['number'] = number
data['address'] = address
data['public_time'] = public_time
data['fulllink'] = fulllink
l.append(data)
# 原来中文写不到文件里面的报错原因,没把python列表序列化为json数组
# with open('tencent.json','a') as f:
# f.write(str(data) + '\n')
# 方法1存储数据,上面字典的值不用先进行utf-8编码
# 把数据以json文件形式存储
# f = open('tencent.json','a')
# 把python列表序转化为json对象。本地操作常用的是load dump。网络操作常用的loads dumps,而loads常用来把json格式转化为python格式,dumps把python格式序列为json格式
# dictdata = json.dumps(l,ensure_ascii=False)
# 把json对象写入json文件
# f.write(dictdata.encode('utf-8'))
# f.close()
# 把数据存入tencent.json文件内
json.dump(l,open('tencent.json','a'),ensure_ascii=False)
总结与展望
以上内容为本次技术分享的全部要点,希望能为读者的学习提供有益参考,同时也欢迎大家继续支持本站获取更多技术资源。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









