爬取拉勾网所有python职位并保存到excel表格 对象方式
# 1.把之间案例,使用bs4,正则,xpath,进行数据提取。
# 2.爬取拉钩网上的所有python职位。 from urllib import request,parse
import json,random
#导入xlsxwriter 主要用于生成excel表格对象
import xlsxwriter #创建python的职位类
class python_position:
def __init__(self,page,number):
self.page = page
self.number = number
#调用创建excel对象的函数
self.create_book()
self.page_chuli() print(self.page,self.number)#1 0 #创建excel对象函数
def create_book(self):
#创建excel对象
self.workbook_attr = xlsxwriter.Workbook('test1.xlsx')
#创建表对象,用于写入字符串
self.worksheet = self.workbook_attr.add_worksheet('test1') #处理页码数量函数
def page_chuli(self):
#每次页码不一样 也就是number不一样
for page in range(1, 31):
self.page = page
self.user_agent()
self.number += 1
self.workbook_attr.close() def user_agent(self):
#浏览器列表,每次访问可以用不同的浏览器访问
user_agent_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36',
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
]
#随机选取一个浏览器访问
self.user_agent_str = random.choice(user_agent_list)
#调用拉钩函数
self.lagou() def lagou(self):
#职位请求地址
base_url = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false&isSchoolJob=0"
#判断是否是第一次访问,第二次访问data的值不一样
if self.page == 1:
first = 'true'
else:
first = 'false'
data = {
'first':first,
'pn':self.page,
'kd':'python'
}
print('page:',self.page)
#参数拼接及转码,生成是字符串格式, 注意:长度下面的headers用的到
data = parse.urlencode(data)
#一定要比较每次page不一样的时候headers的各项的细微差别 这个很重要 也是能否爬取数据的关键
#在这里Content-Length,User-Agent的值相对来说比较重要
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
# Accept-Encoding:gzip, deflate
'Accept-Language': 'zh-CN,zh;q=0.8',
'Connection': 'keep-alive',
'Content-Length': len(data),
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'user_trace_token=20180310205250-ccfd21f6-5b57-4e04-b90c-5e547e18d391; LGUID=20180310205255-f3afa6e4-2461-11e8-a8b5-525400f775ce; hideSliderBanner20180305WithTopBannerC=1; X_HTTP_TOKEN=673c8ae0b29d830c65e9812a6aeeb211; ab_test_random_num=0; JSESSIONID=ABAAABAAADEAAFI0BD8484557BF60A48BF2BDD6AA4C5D33; _putrc=318C0D90043747B6123F89F2B170EADC; login=true; unick=%E5%BC%A0%E6%B3%A2; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=0; gate_login_token=d46c3e3008cb0364e7b47d9d261956a39273c72d679a1b0eb644e03620c100fa; TG-TRACK-CODE=index_navigation; _gid=GA1.2.1883607132.1520686376; _ga=GA1.2.2068283511.1520686375; LGSID=20180310215122-1e408aca-246a-11e8-a8ed-525400f775ce; LGRID=20180310233852-22b0d3ee-2479-11e8-a921-525400f775ce; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1520686378,1520689884; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1520696337; SEARCH_ID=458b8d44186948ceb472c3d662f08528; index_location_city=%E5%8C%97%E4%BA%AC',
'Host': 'www.lagou.com',
'Origin': 'https://www.lagou.com',
'Referer': 'https://www.lagou.com/jobs/list_python?city=%E5%8C%97%E4%BA%AC&cl=false&fromSearch=true&labelWords=&suginput=',
"User-Agent": self.user_agent_str,
'X-Anit-Forge-Code': 0,
'X-Anit-Forge-Token': 'None',
'X-Requested-With': 'XMLHttpRequest'
}
req = request.Request(url=base_url,data=bytes(data,encoding='utf-8'),headers=headers)
response = request.urlopen(req)
html = response.read()
html = html.decode('utf-8') #使用json格式化,生成一个字典,然后从字典里头取值就可以,下面就是取值的过程,想要啥就可以啥
json_data = json.loads(html)
# print(json_data)
positionResult = json_data['content']['positionResult']
# print(positionResult)
self.result_list = positionResult['result']
print(self.result_list)
self.workbook() def workbook(self): for result in self.result_list:
# print(len(result))
# print(len(result))
# print(result)
self.worksheet1(result)
self.number += 1
print(self.number)
print('~~~~~~~~~~~~~~~~~~~~~haha~~~~~~~~~~~~~~~~~~~~~~~')
# self.workbook_attr.close()
# print(self.number)
def worksheet1(self,result):
# print(self.worksheet,result,self.number)
keys = list(result.keys()) if self.number == 0:
self.keys_list = keys
for i in range(len(keys)):
# 向work中添加数据 def write(self, row, col, *args):
# write第一个参数是行,第二个参数是列,第三个是要写入的参数名称
print(keys[i], type(keys[i]),i)
self.worksheet.write(0, i, str(keys[i]))
print('~~~~~~~~~~~~~~~~~~~~0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') values = []
for k in self.keys_list:
values.append(result[k])
# print(type(keys))
# values = list(result.values())
# print(type(values))
for i in range(len(values)):
# 向work中添加数据 def write(self, row, col, *args):
# write第一个参数是行,第二个参数是列,第三个是要写入的参数名称
print(str(values[i]),i,len(values))
self.worksheet.write(self.number+1, i, str(values[i]))
print('------------------------1-------------------------------')
# workbook.close() if __name__ == '__main__':
lagou_python = python_position(1,0)
爬取拉勾网所有python职位并保存到excel表格 对象方式的更多相关文章
- Python爬取猫眼电影100榜并保存到excel表格
首先我们前期要导入的第三方类库有; 通过猫眼电影100榜的源码可以看到很有规律 如: 亦或者是: 根据规律我们可以得到非贪婪的正则表达式 """<div class ...
- 使用requests、BeautifulSoup、线程池爬取艺龙酒店信息并保存到Excel中
import requests import time, random, csv from fake_useragent import UserAgent from bs4 import Beauti ...
- 使用requests、re、BeautifulSoup、线程池爬取携程酒店信息并保存到Excel中
import requests import json import re import csv import threadpool import time, random from bs4 impo ...
- 爬取拉勾网招聘信息并使用xlwt存入Excel
xlwt 1.3.0 xlwt 文档 xlrd 1.1.0 python操作excel之xlrd 1.Python模块介绍 - xlwt ,什么是xlwt? Python语言中,写入Excel文件的扩 ...
- 爬取前尘无忧python职位信息并保存到mongo数据库
1.re实现 import re,os import requests from requests.exceptions import RequestException MAX_PAGE = 10 # ...
- 爬取淘宝商品数据并保存在excel中
1.re实现 import requests from requests.exceptions import RequestException import re,json import xlwt,x ...
- python 数据如何保存到excel中--xlwt
第一步:下载xlwt 首先要下载xlwt,(前提是你已经安装好了Python) 下载地址: https://pypi.python.org/pypi/xlwt/ 下载第二个 第二步:安装xl ...
- 自动网页截图并指定元素位置裁剪图片并保存到excel表格
# coding=utf-8 import os import time from selenium import webdriver from selenium.webdriver.chrome.o ...
- 将查询列表内容保存到excel表格中,并保存到相应的盘中
1.先导入相应的jar包 2.一个小的Demo测试[实体类+测试类:保存excel的方法] Student实体类 public class Student{ private int id; priva ...
随机推荐
- Manacher(输出最长回文串及下标)
http://acm.hdu.edu.cn/showproblem.php?pid=3294 Girls' research Time Limit: 3000/1000 MS (Java/Others ...
- [暑假集训Day4T1]羊圈
ZYC同志开农场了????? 二分答案. 对于每一个二分出来的答案对其进行检查(check),检查是否有一个长度大于m的字段和的平均值大于mid.方法如下:先把原数组的每一个元素减去mid,储存进一个 ...
- 复制书稿 (dp+贪心)
[题目描述] 现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三和第四本书给同一个人抄写 ...
- 阿里云云监控agent插件 - Linux版
阿里云云监控agent插件使用指南 1.安装(注意,要以“root”权限运行,复制 sudo后面的就行,别把#也复制进去) #64位 # sudo bash -c "wget -e 'htt ...
- dataTable获取所有数据
"drawCallback": function(settings,e) { var api = new $.fn.dataTable.Api( settings ); resul ...
- 32.Group Anagrams(相同元素的不同组合)
Level: Medium 题目描述: Given an array of strings, group anagrams together. Example: Input: ["eat ...
- Task总结
1.Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: ◆ ThreadPool不支持线程的取消.完成.失败通知等交互性 ...
- Java 8实战之读书笔记三:函数式数据处理
二.函数式数据处理 第4章 引入流 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现). 示例: import static java.uti ...
- org.mybatis.spring.mapper.MapperScannerConfigurer 类作用
1. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property nam ...
- HDU 6613 Squrirrel 树形dp
题意:给你一颗树,你可以把这棵树上的一条边的边权变为0,现在让你选一个根,让所有点到这个点的最大距离尽量的小.如果有多个根的最大距离距离相同,输出编号最小的边. 思路:如果没有把边权变为0的操作,这个 ...