最近自学研究爬虫,特找个地方记录一下代码。就来到了51cto先测试一下。第一次发帖不太会。先贴个代码。
首先打开拉勾网首页,然后在搜索框输入关键字Python。打开抓包工具。因为我的是MAC os,所以用的自带的Safari浏览器的开启时间线录制。通过抓取post方法,可以看到完整url=
1
|
http:
/
/
www.lagou.com
/
jobs
/
positionAjax.json?
|
然后可以发现post的数据有三个,一个是first,kd,pn。其中first应该是判断是不是首页,Kd就是你输入的关键字,pn就是页码。除了第一页的first是true以外都是false。所以就可以用过if判断每次要post的数据。你从浏览器输入上面的网址他给你返回的应该是遗传json数据。所以需要json.loads()来处理这些数据。看了一下json,跟多维数组的使用比较类似。。。最后就是把我需要的数据趴下来写到文本文件中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#coding=utf-8
import
json
import
urllib2
import
urllib
import
sys
reload
(sys)
sys.setdefaultencoding(
'utf-8'
)
page
=
1
length
=
0
index
=
1
f
=
open
(
'lagoudata.txt'
,
'a+'
)
while
page<
5
:
if
(page
=
=
1
):
post_data
=
{
'first'
:
'true'
,
'kd'
:
'python'
,
'pn'
:page}
else
:
post_data
=
{
'first'
:
'false'
,
'kd'
:
'python'
,
'pn'
:page}
page
=
page
+
1
r
=
urllib2.Request(
"http://www.lagou.com/jobs/positionAjax.json?px=default"
, urllib.urlencode(post_data))
html
=
urllib2.urlopen(r).read()
hjson
=
json.loads(html)
result
=
hjson[
'content'
][
'result'
]
# print result
length
=
length
+
len
(result)
for
i
in
range
(
len
(result)):
string
=
str
(index)
+
','
+
result[i][
'companyName'
]
+
','
+
result[i][
'financeStage'
]
+
','
+
result[i][
'positionAdvantage'
]
+
','
+
result[i][
'education'
]
+
','
+
result[i][
'workYear'
]
+
','
+
result[i][
'city'
]
+
','
+
result[i][
'salary'
]
f.write(string)
f.write(
'\r\n'
)
index
=
index
+
1
#print string
f.close()
print
length
|
因为这边拉钩网返回的json数据,所以要做处理。反正下图是我最后爬的数据
PS:我写的程序是自己手动输入需要爬取多少页。但是学长给我说可以通过判断页面中“下一页”这三个字在HTML中的区别。通过审查第一页和最后一页中“下一页”这三个字就可以看出来他们的class是不同的。到时候可以通过判断class来确定是不是到达最后一页。可惜发现拉钩是js渲染的。。。。而且他只提供30页的数据。。。所以这边也就无所谓了。
本文转自 努力的C 51CTO博客,原文链接:http://blog.51cto.com/fulin0532/1748561