爬虫可以简单的分为三个部分,url分析,网页分析与信息获取,信息存储。
(1)url分析
在进行爬取前,首先分析拉钩网的url特点。打开拉钩网,在搜索栏界面输入 python爬虫 然后进行搜索,
得到如下界面
然后,右键—查看源代码,会发现在源代码页面找不到职位的信息,可以猜想,网站使用的是其他的方法来加载信息的,比如,Ajax。接下来,右键—审查元素——Network
选择xhr ,然后选择 name 下的一个链接,然后点击headers 。在headers下面,General 下面,可以看到
Request URL:https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false
Request Method:POST
因此,该网页的请求链接:
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
请求方式是 post。
再继续向下,可以看到
点击拉钩网职位页面的“下一页”,可以看到,requests url没有变化,但form data 中的 pn 值由 1 变为了 2,因此,可以看出,页面的切换是由 pn 控制的。因此,可以通过改变pn值来换页。
到这里,url的构造逻辑,基本就已经完成了。这部分的源码如下:
def url_create():
headers={'Cookie':'user_trace_token=20180617062143-a2c67f89-f721-42a0-a431-0713866d0fc1; __guid=237742470.3953059058839704600.1529187726497.5256;\
LGUID=20180617062145-a70aea81-71b3-11e8-a55c-525400f775ce; index_location_city=%E5%85%A8%E5%9B%BD;\
JSESSIONID=ABAAABAAAIAACBIA653C35B2B23133DCDB86365CEC619AE; PRE_UTM=; PRE_HOST=; PRE_SITE=;\
PRE_LAND=https%3A%2F%2Fwww.lagou.com%2Fjobs%2Flist_pythonpytho%25E7%2588%25AC%25E8%2599%25AB%3Fcity%3D%25E5%2585%25A8%25E5%259B%25BD;\
TG-TRACK-CODE=search_code; X_MIDDLE_TOKEN=8a8c6419e33ae49c13de4c9881b4eb1e; X_HTTP_TOKEN=5dd639be7b63288ce718c96fdd4a0035;\
_ga=GA1.2.1060168094.1529187728; _gid=GA1.2.1053446384.1529187728; _gat=1;\
Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1529190520,1529198463,1529212181,1529212712;\
Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1529225935; LGSID=20180617164003-0752289a-720a-11e8-a8bc-525400f775ce;\
LGRID=20180617165832-9c78c400-720c-11e8-a8bf-525400f775ce; SEARCH_ID=1dab13db9fc14397a080b2d8a32b7f27; monitor_count=70',
'Host':'www.lagou.com',
'Origin':'https://www.lagou.com',
'Referer':'https://www.lagou.com/jobs/list_python%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
'X-Requested-With':'XMLHttpRequest'}
city_list = ['上海', '北京', '杭州', '成都','苏州']
position_list=['python爬虫', 'python数据分析']
for city in city_list:
for position in position_list:
url = "https://www.lagou.com/jobs/list_{}?city={}".format(position, city)
data = {
'first':flag, #true or false
'pn':page, #切换页面
'kd':position, #职位
}
response = requests.post(url, headers = headers, data= data)
yield response.json()