python2使用bs4爬取腾讯社招过程解析
目的:获取腾讯社招这个页面的职位名称及超链接职位类别人数地点和发布时间
要求:使用bs4进行解析,并把结果以json文件形式存储
注意:如果直接把python列表没有序列化为json数组,写入到json文件,会产生中文写不进去到文件,所以要序列化并进行utf-8编码后写入文件。
#-*-coding:utf-8-*-
importrequests
frombs4importBeautifulSoupasbs
importjson
url='https://hr.tencent.com/position.php?'
params={
'start':'10'
}
headers={
'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/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={}
foriteminresult:
#获取标签的文本内容
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数组
#withopen('tencent.json','a')asf:
#f.write(str(data)+'\n')
#方法1存储数据,上面字典的值不用先进行utf-8编码
#把数据以json文件形式存储
#f=open('tencent.json','a')
#把python列表序转化为json对象。本地操作常用的是loaddump。网络操作常用的loadsdumps,而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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。