说明
采用的工具有
1、fiddler抓包工具
2、安卓手机
由于最近找实习工作基本用的就是实习僧这个软件,于是闲来没事做,就爬了一下手机APP的数据,但是仅仅爬取的是爬虫,和python相关的实习岗位。
由于博客上第一次记录手机app爬虫,于是就详细记录一下过程。
操作步骤
设置浏览器代理
1、打开fiddler
2、Tools->options
3、Eeport Root Certificate to Desktop
将证书导入到桌面之后,然后导入到浏览器。以火狐浏览器为例。
4、然后设置代理,其默认代理端口为8888
到这里你的浏览器就可以实现抓包了,但是一般浏览器都没有怎么用过fiddler,因为浏览器自带抓包功能。只是浏览器可能抓包不是很全面,但是对于常规的爬虫是可以满足的。
设置手机app代理
1、仍然打开fiddler,在Tools->Options
2、然后在手机设置代理
这里需要注意,手机和电脑需要在同一局域网。手机上的代理ip就是你的电脑的ip地址。然后在手机的无限设置部分,如下
3、在手机的任意浏览器输入如下地址
你的代理ip(电脑的ip)+8888,例如:192.168.0.108:8888
4、然后下载证书,在手机上直接点击就完成证书安装。就可以非常愉快的抓包了。
开始爬虫实习僧
1、打开实习僧软件。然后清楚所有的数据包,然后搜索爬虫相关的职位。
此时我们已经找到了目标链接,这时候就和电脑端爬虫是一样的了。其他的就不用过多的介绍。
本次采用的MongoDB,一种NoSql,大约2年前就接触了这种数据库,操作起来也是比较简单的。
这次爬虫爬取的是职位为爬虫和python两种职位,地点是全国。
代码如下
# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
import json
import urllib
import pymongo
class shixisheng():
def __init__(self):
self.keywords = ['爬虫','python']
self.contry = '全国'
self.db = pymongo.MongoClient("mongodb://localhost:27017/")['shixisheng']['jobs']
self.headers = {
'User-Agent': 'Android',
'X-JSL-API-AUTH': 'md5|1533730928|atI0131w8B221rFH|863e02f2070cb8b4b6e9bada38705871',
'Host': 'androidapi.shixiseng.com',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
}
def parse(self):
keys = self.keywords
c = self.contry
for k in keys:
for i in range(1,11):
url = 'https://androidapi.shixiseng.com/app/interns/search?k={0}&c{1}&s=-0&d=&page={2}&m=&x=&z=&st=intern&ft=&t=zj'.format(urllib.quote(k),urllib.quote(c),str(i))
data = requests.get(url,headers=self.headers,verify=False).content
js_data = json.loads(data)
jobs_list = js_data['msg']
for job in jobs_list:
item = {}
item['job_name'] = job['name']
item['maxsal'] = job['maxsal']
item['minsal'] = job['minsal']
item['city'] = job['city']
item['com_img'] = job['url']
item['refresh_time'] = job['refresh']
item['day_per_week'] = job['day']
item['com_name'] = job['cname']
yield item
if __name__ == "__main__":
run = shixisheng()
run.db.insert(run.parse())
代码中verify=False参数很重要,因为他要验证你的ssl证书。
如果不加这句的话,会出现如下错误。
requests.exceptions.SSLError: HTTPSConnectionPool(host='androidapi.shixiseng.com', port=443)
最终结果