分页爬取Boss招聘信息
上一篇博客是进行了单页的爬取,这一篇博客进行分页爬取
对了 昨天爬了boss今天打开那个网页需要验证一下才能正常使用,爬虫频繁访问人家的网站确实会对人家的服务器造成很大的压力。
直接上源码:
#coding=utf-8
import re,requests,json
import time
from lxml import etree
#页面请求函数
def get_page(url):
#定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
'cookie':'__zp__pub__=; __c=1594858288; __g=-; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1594802566,1594802579,1594804509,1594858288; lastCity=100010000; __l=l=%2Fwww.zhipin.com%2F&r=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DQQT0PZQBIVcpwWTeZGMmOwV5nQUWVTgFd7EM1L42SmqzJhjC9klUxgc9l2LHGTXa%26wd%3D%26eqid%3De3bb42570052c852000000035f0f9b29&friend_source=0&friend_source=0; __a=41908954.1594802565.1594802579.1594858288.21.3.5.21; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1594858520; __zp_stoken__=e5e0aWGo3cmlTcy4sL0UcdSx7Ri8mMGhwMRYXOTRDZyB1IGpIJWQZcCkUDnw8LhE0GiA6QDokCSA6V3sVPjgZKxJpAnQNazQ3eBVebBkkNXVORwkARV0sJU50BUMCWUd%2FWBl%2FPzVffFhyTXo%3D; __zp_sseed__=7fK5T//qwfcgyvpIKVkQSe3LryZBDEUQ3/HO+nDeYaY=; __zp_sname__=e351c092; __zp_sts__=1594858959299'
}
#请求指定的url,返回请求的页面
# 发送请求
res = requests.get(url=url, headers=headers)
# 判断请求是否成功
if res.status_code == 200:
response=res.content.decode('utf-8')
return response
else:
return False
#解析页面html数据
def parse_html(html):
try:
html=etree.HTML(html)
job_data = html.xpath('//div[@class="job-title"]//a/text()')
city_data = html.xpath('//span[@class="job-area-wrapper"]//span/text()')
company_data = html.xpath('//div[@class="company-text"]//h3//a[1]/text()')
company_type_data = html.xpath('//div[@class="company-text"]//p//a[1]/text()')
data = list(zip(job_data, city_data, company_data, company_type_data))
print(data)
return data
except:
return False
def main(num):
#拼接url
url=f'https://www.zhipin.com/c100010000/?page={num}&ka=page-{num}'#使用f可以直接在字符串中拼接变量
#调用请求页面的程序
html=get_page(url)
if html:
#调用解析的方法函数
alist=parse_html(html)
with open("./morenewbossdata.json",'a+') as f:
for i in alist:
f.write(json.dumps(i)+'\n')
if __name__=="__main__":
for i in range(1,11):
print(f'当前正在爬取第{i}页') #f拼接
main(i)
time.sleep(2)
说一下思路,先进行导包,本文还是使用xpath进行数据解析
首先写主函数main(),写入url 使用f可以直接在字符串中拼接变量(这是在那个学习爬虫的视频中老师教的一种方法)
然后调用页面请求函数get_page()传入参数url,在get_page这个函数中,定义好请求头,也就是上篇博客写的那样的操作,发送请求和验证请求是否成功 传入参数num 也就是我们想要爬取多页的一个参数
请求完成后,调用解析函数parse_html()成功后将数据写入json文件中。
最后写入
if name==“main”:
for i in range(1,11):
print(f’当前正在爬取第{i}页’) #f拼接
main(i)
time.sleep(2)
爬取1-11页的数据共10页,调用主函数
json数据格式的处理还是上篇博客的处理方法,暂时我还没有学习到一种直接就能将中文写进的方法(还得继续学习)
按照箭头的提示去操作;转换成功后的数据:
每页30条数据,这里出了一个问题就是,爬到4页后面就爬不出来了