项目运行
启动lagouspider.py填写要查询的城市和关键词即可,爬虫运行完毕会将信息保存到Excel表格中, 表格名称以启动时间和关键词命名
项目结构
爬虫代码,负责调度其他文件执行信息的提取和数据保存:
# -*- coding:utf-8 -*-
import requests
import json
from urllib.parse import quote
from config import myheaders
from bs4 import BeautifulSoup
from savedata import myexcel
class myspider(object):
def __init__(self,mykey,mycity):
# 自定义一个变量self.i,代表Excel表格的行数
self.i = 1
self.key = mykey
self.city = mycity
# 获取自定义请求头
self.headers = myheaders.get_headers(mykey,mycity)
# 获取表格类
self.excel = myexcel(mykey,mycity)
# 请求源代码,获取总页码数
def get_pages(self):
url = "https://www.lagou.com/jobs/list_{}?city={}&cl=false&fromSearch=true&labelWords=&suginput=".format(self.key,self.city)
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"}
html = requests.get(url,headers=headers).text
soup = BeautifulSoup(html,"lxml")
totalnum = int(soup.select("span.totalNum")[0].text.strip())
return totalnum
# 获取单个页面的信息
def get_one_html(self,pagenum):
url = "https://www.lagou.com/jobs/positionAjax.json?px=default&city={}&needAddtionalResult=false".format(quote(self.city))
data = {
"first":"true",
"pn":pagenum,
"kd":self.key
}
html = requests.post(url=url,headers=self.headers,data=data).text
infos = json.loads(html)
jobs = infos["content"]["positionResult"]["result"]
for each in jobs:
self.i += 1
# 循环获取所有页面的信息
def main(self):
nums = self.get_pages()
for n in range(1,nums+1):
self.get_one_html(n)
print("总计{}页职位信息,已经成功写入{}页的信息到表格".format(nums,n))
print("所有信息保存完毕!")
if __name__ == '__main__':
# 城市为空的时候代表全国
spider = myspider("Python","深圳")
spider.main()
savedata.py :https://pan.baidu.com/s/1snbURhz
信息保存文件,负责信息保存的方式
config.py :https://pan.baidu.com/s/1pMAoC8F
配置文件,本项目中主要负责构造headers
Python库支持
requests json BeautifulSoup urllib.parse xlwt hashlib datetime random
spider思路
请求一次获取总页码数>>提取并保存数据到Excel>>按照总页码数循环翻页
其他
请求头headers需要附带cookie参数,可以自己构建一个cookie函数自动生成
Excel操作可以参考 https://pan.baidu.com/s/1mjtzK3u
领取专属 10元无门槛券
私享最新 技术干货