python 爬虫之爬取大街网(思路)
由于需要,本人需要对大街网招聘信息进行分析,故写了个爬虫进行爬取。这里我将记录一下,本人爬取大街网的思路。
附:爬取得数据仅供自己分析所用,并未用作其它用途。
附:本篇适合有一定 爬虫基础 crawler 观看,有什么没搞明白的,欢迎大家留言,或者私信博主。
首先,打开目标网址www.dajie.com ,在职位搜索中 输入所需职业或关键信息 (我这演示的是 程序员),然后可得到新的链接地址 https://so.dajie.com/job/search?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&from=job
我们可以看到 ,数据的排序方式有2种,一种是 默认 ,一种是 时间 ,当你点击的时候你可以看到 数据的排序方式发生了变化,但是网页链接却没有变化,而且点击 下一页 的时候页面的链接也没有发生变化,其原因是 当你对其操作时,它通过
JS获取ajax数据进行变换填充,所以如果你要获取所需数据,你只能通过获取其ajax数据。(当然还有模拟JS渲染,得到页面,我没有尝试过,这里也不做多述)
那么如何获取到其数据呢?
当你单击 下一页 等操作时,通过抓包(XHR中)可以查看到ajax数据的来源,查看的时候可以看到其返回的是200(所需的数据),但当你在新的页面打开时,却发现返回的是299,不是你想要的结果。如一下这个链接就是对其进行时间排序所得
的ajax(https://so.dajie.com/job/ajax/search/filter?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&order=1&city=&recruitType=&salary=&experience=&page=1&positionFunction=&_CSRFToken=&ajax=1)
但是如果你是单独打开它的时候,它返回的是一个错误的页面,这应该是 大街网 反爬虫的一种手段。
找到了返回的ajax地址链接,我们该如何正确的打开这个链接呢?
当我们打开这个 链接时(https://so.dajie.com/job/search?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&from=job)会发现服务器端回返回一个 Cookie

因此 当你访问 (https://so.dajie.com/job/ajax/search/filter?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&order=1&city=&recruitType=&salary=&experience=&page=1&positionFunction=&_CSRFToken=&ajax=1)
链接时,你必须要传入服务器返回的cookie 才能够获取到正确的结果。

下面附上本人写的代码,仅供参考。
其中需要注意的是:这些代码仅提供一个思路,里面的很多变量、类都是我项目里面的。
这里统一做一下解释
#from myproject.dajie import Jobs, IpAgentPool 指引入 Ip 池,Jobs所需要爬取得 关键字集合.(下面演示时用不到的)
#from myproject import agentPool 引入 Agent池, 用作伪装浏览器使用
from myproject.dajie import Jobs, IpAgentPool
from myproject import agentPool
import http.cookiejar
import urllib.request
import urllib.parse
import random
import re
#import pymssql class dj(): def __init__(self):
# -----BASEURL 为目标网站的URL
# -----ToSearchJob 为需要搜寻的工作
# -----Agent 为Agent池,用于伪装浏览器
# -----opener 为自己建造的一个opener,配合cookiejar可用于存储cookies
def Myopener(self):
cookie = http.cookiejar.CookieJar()
return urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie)) self.BASEURL = "https://www.dajie.com/"
# self.ToSearchJob=Jobs.TheJobNeedToSearch
self.AgentPool = agentPool.userAgent
self.IpPool = IpAgentPool.ipPool self.opener = Myopener(self=self) pass def getContext(self):
url="https://so.dajie.com/job/search?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&from=job" header=\
{
"User-Agent":agentPool.userAgent[int(random.random()*4)],
"Referer":"https://so.dajie.com/job/search?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&from=job"
} head=[] for key,value in header.items():
head.append((key,value)) self.opener.addheaders=head #session_cookie用于保存服务器返回的cookie,并将其保存
#
#其实只需要保存 session_cookie["SO_COOKIE_V2"] 即可,其余的是多余的。服务器在进行验证的时候,只会验证 SO_COOKIE_V2
#
session_cookie={}
session=self.opener.open("https://so.dajie.com/job/search?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&from=job")
print((session.info())) session_cookie["DJ_RF"]= re.findall(r"DJ_RF=.+?;",str(session.info()))[0].split("=")[1]
session_cookie["DJ_EU"]=re.findall(r"DJ_EU=.+?;",str(session.info()))[0].split("=")[1]
session_cookie["DJ_UVID"] = re.findall(r"DJ_UVID=.+?;", str(session.info()))[0].split("=")[1]
session_cookie["SO_COOKIE_V2"] = re.findall(r"SO_COOKIE_V2=.+?;", str(session.info()))[0].split("=")[1] #data 包含的是所需要传入的 cookie
data=\
{
"DJ_RF":session_cookie["DJ_RF"].strip(";"),
"DJ_EU":session_cookie["DJ_EU"].strip(";"),
"DJ_UVID":session_cookie["DJ_UVID"].strip(";"),
"SO_COOKIE_V2":session_cookie["SO_COOKIE_V2"].strip(";"),
"__login_tips":1,
}
#将 数据解析为传入数据的格式
_data=urllib.parse.urlencode(data,"utf-8")
print("______________")
print(_data)
#
#_url 指的是ajax的链接地址
_url="https://so.dajie.com/job/ajax/search/filter?keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&order=1&city=&recruitType=&salary=&experience=&page=1&positionFunction=&_CSRFToken=&ajax=1"
req=self.opener.open(_url,data=_data.encode("utf-8")) print("-----------------")
print(req.read().decode("utf-8")) #print(req.read().decode("utf-8")) if __name__=="__main__":
_dj=dj()
_dj.getContext()
最后附上运行结果的截图

python 爬虫之爬取大街网(思路)的更多相关文章
- Python爬虫之爬取慕课网课程评分
BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...
- Python爬虫项目--爬取自如网房源信息
本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...
- 简单python爬虫案例(爬取慕课网全部实战课程信息)
技术选型 下载器是Requests 解析使用的是正则表达式 效果图: 准备好各个包 # -*- coding: utf-8 -*- import requests #第三方下载器 import re ...
- 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)
做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...
- Python爬虫之爬取站内所有图片
title date tags layut Python爬虫之爬取站内所有图片 2018-10-07 Python post 目标是 http://www.5442.com/meinv/ 如需在非li ...
- python爬虫实战---爬取大众点评评论
python爬虫实战—爬取大众点评评论(加密字体) 1.首先打开一个店铺找到评论 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经 ...
- Python爬虫之爬取淘女郎照片示例详解
这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...
随机推荐
- 新CCIE笔记之'口口相传'路由协议
//由于思科所有命令行中没有尖括号"<>"这样的关键字,所以本文中出现命令行中的尖括号中的内容均为注释提示信息,代表此处应该填入那一类数据. 请容许我将RIP和EIGR ...
- Swing-JMenu菜单用法-入门
菜单是Swing客户端程序不可获取的一个组件.窗体菜单大致由菜单栏.菜单和菜单项三部分组成,如下图所示: 由图可见,对于一个窗体,首先要添加一个JMenuBar,然后在其中添加JMenu,在JMenu ...
- 201521123037 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. 接口与抽象类 ...
- 201521123053 <<Java基本语法与类库>>第二周
1.本周学习总结 这是第二周学习了,还是感觉吃力,慢慢来吧 .知识总是一点一点进到脑子里,虽然头小,但总会进来不是! 知识储备: A.整形变量按照长度分为byte.short.int.long. ...
- 201521123063 《Java程序设计》 第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. (1)多线程的冲突 当我们不想一种资源被同时使用,导致最后结果不一致,解决方法: 使用synchronized标记 ...
- 201521123032 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- 201521123023《Java程序设计》第11周学习总结
1. 本周学习总结 Lock.Condition,互斥同步访问方法,相比于synchronized,相似的wait().notify().notifyAll()方法,还有更多高级的方法 Executo ...
- JAVA课程设计--简易计算器(201521123022 黄俊麟)
1.团队课程设计博客链接 http://www.cnblogs.com/I-love-java/p/7058752.html 2.个人负责模板或任务说明 1.初始化业务逻辑. 2.开方.正负.清零.退 ...
- 201521123109 《java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 201521123109《java程序设计》第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自 ...