天天看點

Python爬蟲模拟登入京東擷取個人資訊

先上我的代碼。參考了上面連結的文章

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

<code># -*- coding: utf-8 -*-</code>

<code># !/usr/bin/python</code>

<code>import</code> <code>os</code>

<code>import</code> <code>urllib2</code>

<code>import</code> <code>urllib</code>

<code>import</code> <code>cookielib</code>

<code>import</code> <code>re </code>

<code>import</code> <code>sys</code>

<code>from</code> <code>bs4 </code><code>import</code> <code>BeautifulSoup</code>

<code>'''</code>

<code>編碼方式的設定,在中文使用時用到中文時的處理方式</code>

<code>default_encoding </code><code>=</code> <code>"utf-8"</code>

<code>if</code> <code>sys.getdefaultencoding() !</code><code>=</code> <code>default_encoding:</code>

<code>  </code><code>reload</code><code>(sys)</code>

<code>  </code><code>sys.setdefaultencoding(</code><code>"utf-8"</code><code>)</code>

<code>def</code> <code>getHtml(url,data</code><code>=</code><code>{}):</code>

<code>    </code><code>if</code><code>(data</code><code>=</code><code>=</code><code>{}):</code>

<code>        </code><code>req</code><code>=</code><code>urllib2.Request(url)</code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>req</code><code>=</code><code>urllib2.Request(url,urllib.urlencode(data))</code>

<code>    </code><code>html</code><code>=</code><code>urllib2.urlopen(req).read()</code>

<code>    </code><code>return</code> <code>html</code>

<code>try</code><code>:</code>

<code>    </code><code>cookie </code><code>=</code> <code>cookielib.CookieJar()</code>

<code>    </code><code>cookieProc </code><code>=</code> <code>urllib2.HTTPCookieProcessor(cookie)</code>

<code>except</code><code>:</code>

<code>    </code><code>raise</code>

<code>else</code><code>:</code>

<code>     </code><code>opener </code><code>=</code> <code>urllib2.build_opener(cookieProc)</code>

<code>     </code><code>opener.addheaders </code><code>=</code> <code>[(</code><code>'User-Agent'</code><code>,</code><code>'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'</code><code>)]</code>

<code>     </code><code>urllib2.install_opener(opener)</code>

<code>auth_url</code><code>=</code><code>'https://passport.jd.com/uc/loginService'</code>

<code>#auth_url = 'http://www.nowamagic.net/'</code>

<code>home_url</code><code>=</code><code>'http://usergrade.jd.com/user/consume'</code>

<code>#home_url = 'http://www.nowamagic.net/librarys/nmra/';</code>

<code>url </code><code>=</code> <code>"https://passport.jd.com/uc/login"</code>

<code>login</code><code>=</code><code>getHtml(url)</code>

<code>#print login </code>

<code>loginSoup </code><code>=</code> <code>BeautifulSoup(login,</code><code>'html.parser'</code><code>)</code>

<code>#查找登陸參數中的uuid</code>

<code>uuid </code><code>=</code> <code>loginSoup.find_all(</code><code>"form"</code><code>)[</code><code>0</code><code>].find_all(</code><code>"input"</code><code>)[</code><code>0</code><code>][</code><code>'value'</code><code>]</code>

<code>print</code> <code>uuid</code>

<code>clrName</code><code>=</code><code>loginSoup.find_all(</code><code>"form"</code><code>)[</code><code>0</code><code>].find_all(</code><code>"input"</code><code>)[</code><code>6</code><code>][</code><code>'name'</code><code>]</code>

<code>clrValue</code><code>=</code><code>loginSoup.find_all(</code><code>"form"</code><code>)[</code><code>0</code><code>].find_all(</code><code>"input"</code><code>)[</code><code>6</code><code>][</code><code>'value'</code><code>]</code>

<code>'''這倆參數不是必須。。。。</code>

<code>eid=loginSoup.find_all("form")[0].find_all("input")[4]['value']</code>

<code>fp=loginSoup.find_all("form")[0].find_all("input")[5]['value']</code>

<code>#下載下傳驗證碼圖檔:</code>

<code>checkPicUrl </code><code>=</code> <code>loginSoup.find_all(</code><code>"div"</code><code>,</code><code>id</code><code>=</code><code>"o-authcode"</code><code>)[</code><code>0</code><code>].find_all(</code><code>"img"</code><code>)[</code><code>0</code><code>][</code><code>'src2'</code><code>]</code>

<code>req </code><code>=</code> <code>getHtml(checkPicUrl)</code>

<code>checkPic </code><code>=</code> <code>open</code><code>(</code><code>"checkPic.jpg"</code><code>,</code><code>"w"</code><code>)</code>

<code>checkPic.write(req)</code>

<code>checkPic.close()</code>

<code>#調用mac系統的預覽(圖像檢視器)來打開圖檔檔案</code>

<code>os.system(</code><code>'open /Applications/Preview.app/ checkPic.jpg'</code><code>)</code>

<code>checkCode </code><code>=</code> <code>raw_input</code><code>(</code><code>"請輸入彈出圖檔中的驗證碼:"</code><code>) </code>

<code>#登入URL</code>

<code>url </code><code>=</code> <code>"http://passport.jd.com/uc/loginService"</code>

<code># 登陸使用者名和密碼</code>

<code>postData </code><code>=</code> <code>{</code>

<code>    </code><code>'loginname'</code><code>:</code><code>'你自己的賬号'</code><code>,</code>

<code>    </code><code>'nloginpwd'</code><code>:</code><code>'你自己的密碼'</code><code>,</code>

<code>    </code><code>'loginpwd'</code><code>:</code><code>'你自己的密碼'</code><code>,</code>

<code>    </code><code># 'machineNet':'',</code>

<code>    </code><code># 'machineCpu':'',</code>

<code>    </code><code># 'machineDisk':'', </code>

<code>    </code><code>str</code><code>(clrName):</code><code>str</code><code>(clrValue),</code>

<code>    </code><code>'uuid'</code><code>:uuid,</code>

<code>    </code><code>'authcode'</code><code>: checkCode</code>

<code>}</code>

<code>passport</code><code>=</code><code>getHtml(url,postData)</code>

<code>print</code> <code>passport</code>

<code># 初始化一個CookieJar來處理Cookie</code>

<code>cookieJar=cookielib.CookieJar()</code>

<code># 執行個體化一個全局opener</code>

<code>opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))</code>

<code># 擷取cookie</code>

<code>req=urllib2.Request(auth_url,post_data,headers)</code>

<code>result = opener.open(req)</code>

<code># 通路首頁 自動帶着cookie資訊</code>

<code>result </code><code>=</code> <code>opener.</code><code>open</code><code>(</code><code>'http://i.jd.com/user/info'</code><code>)</code>

<code># 顯示結果</code>

<code>#print result.read()</code>

<code>soup</code><code>=</code><code>BeautifulSoup(result,</code><code>'html.parser'</code><code>)</code>

<code>#昵稱</code>

<code>nickName </code><code>=</code> <code>soup.find_all(</code><code>"input"</code><code>, </code><code>id</code><code>=</code><code>"nickName"</code><code>)[</code><code>0</code><code>][</code><code>"value"</code><code>]</code>

<code>print</code> <code>"nickName:"</code><code>,</code>

<code>print</code> <code>nickName</code>

但是當我回到寝室再次測試的時候卻給我傳回了“請重新整理頁面後重新送出”,暫時還沒有解決。

本文轉自 努力的C 51CTO部落格,原文連結:http://blog.51cto.com/fulin0532/1748590