路飞学城-Python爬⾍集训-第1章
1⼼得体会
沛奇⽼师讲的真⼼不错。通过这节学习,让我能简单获取⼀些⽹站的信息了。以前是只能获取静态⽹页,不知道获取要登录的⽹站的资源。这次后能获奖⼀些需要登录功能⽹站的资源了,⽽且也对requests模板更加熟练了。更重要的是,当爬⾍时,怎么去分析⽹页,这个学到了很多。
2 什么是爬⾍
  百度百科:⽹络爬⾍(⼜被称为⽹页蜘蛛,⽹络机器⼈,在FOAF社区中间,更经常的称为⽹页追逐者),是⼀种按照⼀定的规则,⾃动地抓取万维⽹信息的程序或者脚本。
  通过Python可以快速的编写爬⾍程序,来获取指定URL的资源。python爬⾍⽤requests和bs4这两个模板就可以爬取很多资源了。
3 request
  request⽤到的常⽤两个⽅法为 get 和 post。
  由于⽹络上,⼤多数的url访问都是这两种访问,所以通过这两个⽅法可以获取⼤多数⽹络资源。
  这两个⽅法的主要参数如下:
    url:想要获取URL资源的链接。
    headers:请求头,由于很多⽹站都做了反爬⾍。所以伪装好headers就能让⽹站⽆法释放是机器在访问。
    json:当访问需要携带json时加⼊。
    data:当访问需要携带data时加⼊,⼀般登录⽹站的⽤户名和密码都在data⾥。
    cookie:由于辨别⽤户⾝份,爬取静态⽹站不需要,但需要登录的⽹站就需要⽤到cookie。
    parmas:参数,有些url带id=1&user=starry等等,可以写进parmas这个参数⾥。
    timeout:设置访问超时时间,当超过这个时间没有获取到资源就停⽌。
    allow_redirects:有些url会重定向到另外⼀个url,设置为False可以⾃⼰不让它重定向。
    proxies:设置代理。
  以上参数是主要⽤到的参数。
4.bs4
bs4是将request获取到的内容进⾏解析,能更快的到内容,也很⽅便。
当requests返回的text内容为html时,⽤bs4进⾏解析⽤,soup = BeautifulSoup4(html, "html.parser")
soup 常⽤的⽅法有:
find:根据参数查第⼀个符合的内容,⽤⽤的有name和attrs参数
find_all:查全部的。
get:获取标签的属性
常⽤的属性有children
5 登录抽屉并⾃动点赞
1、⾸先向 dig.chouti 访问获取cookie
1 r1 = (
2    url="dig.chouti/",
3    headers={
4"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"
5    }
6 )
7 r1_cookie_dict = _dict()
2 、访问 dig.chouti/login 这个⽹页,并携带账户、密码和cookie。
1 response_login = requests.post(
2    url='dig.chouti/login',
3    data={
4"phone":"xxx",
5"password":"xxx",
6"oneMonth":"1"
7    },
8    headers={
9"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"
10    },
11    cookies = r1_cookie_dict
12 )
3、获取点赞某个新闻需要的url,携带cookie访问这个url就可以访问了。
1 rst = requests.post(
2        url="dig.chouti/link/vote?linksId=20639606",
3        headers={
4"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"
5        },
6        cookies = r1_cookie_dict
7    )
6 ⾃动登⼊拉勾⽹并修改信息
1 拉勾⽹为了防访问,在headers⾥需要 X-Anit-Forge-Code 和 X-Anit-Forge-Token 这两个值,这两个值访问拉勾登录⽹页可以获取。
1 r1 = (
2    url='passport.lagou/login/login.html',
3    headers={
4'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36',
5'Host':'passport.lagou'
6    }
7 )
8 all_cookies._dict())
9
10 X_Anit_Forge_Token = re.findall(r"X_Anti_Forge_Token = '(.*?)';",r1.text,re.S)[0]
11 X_Anti_Forge_Code = re.findall(r"X_Anti_Forge_Code = '(.*?)';",r1.text,re.S)[0]
2 然后访问登录url,并将账户、密码和上⾯两个值携带进去。当然,headers⾥的值需要全⼀点。
1 r
2 = requests.post(
2    url="passport.lagou/login/login.json",
3    headers={
4'Host':'passport.lagou',
5"Referer":"passport.lagou/login/login.html",
6"X-Anit-Forge-Code": X_Anti_Forge_Code,
7"X-Anit-Forge-Token": X_Anit_Forge_Token,
8"X-Requested-With": "XMLHttpRequest",
9'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36', 10"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
11    },
12    data={
13"isValidate":"true",
14"username":"xxx",
15"password":"xxx",
16"request_form_verifyCode":"",
17"submit":""
18    },
19    _dict()
20 )
21 all_cookies._dict())
3 当然,获取了登录成功的cookie也不⼀定可以修改信息。这时还需要⽤户授权。访问 passport.lagou/grantServiceTicket/grant.html这个⽹页就可以获取到
1 r3 = (
2    url='passport.lagou/grantServiceTicket/grant.html',
3    headers={
4'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
5    },
6    allow_redirects = False,
7    cookies = all_cookies
8 )
9 all_cookies._dict())
4 ⽤户授权会重定向⼀系列的url,我们需要把重定向的⽹页的cookie全部拿到。重定向的⽹页在上⼀个url中的Location⾥。
1 r4 = (
2    url=r3.headers['Location'],
3    headers={
4'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
5    },
6    allow_redirects=False,
7    cookies=all_cookies
8 )
9 all_cookies._dict())
10
11print('r5',r4.headers['Location'])
12 r5 = (
13    url=r4.headers['Location'],
14    headers={
15'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
16    },
17    allow_redirects=False,
18    cookies=all_cookies
19 )
20 all_cookies._dict())
21
22print('r6',r5.headers['Location'])
23 r6 = (
24    url=r5.headers['Location'],
25    headers={
26'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
27    },
28    allow_redirects=False,
29    cookies=all_cookies
30 )
31 all_cookies._dict())
32
33print('r7',r6.headers['Location'])
34 r7 = (
35    url=r6.headers['Location'],
36    headers={
37'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
38    },
39    allow_redirects=False,
40    cookies=all_cookies
41 )
42 all_cookies._dict())
⽤户认证
5 接下来就是修改信息了,修改信息时访问的url需要传⼊submitCode和submitToken这两个值,通过分析可以得到这两个值在访
问 gate.lagou/v1/neirong/account/users/0/这⾥url的返回值中可以获取。
获取submitCode和submitToken:
1 r6 = (
2    url='gate.lagou/v1/neirong/account/users/0/',
3    headers={
4"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36", 5'X-L-REQ-HEADER': "{deviceType:1}",
6'Origin': 'account.lagou',
7'Host': 'gate.lagou',
8    },
9    cookies = all_cookies
10 )
11 all_cookies._dict())
12 r6_json = r6.json()
修改信息:
1 r7 = requests.put(
2    url='gate.lagou/v1/neirong/account/users/0/',
3    headers={
4'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36', 5'Origin': 'account.lagou',
6'Host': 'gate.lagou',
7'X-Anit-Forge-Code': r6_json['submitCode'],
8'X-Anit-Forge-Token': r6_json['submitToken'],
9'X-L-REQ-HEADER': "{deviceType:1}",
10    },
11    cookies=all_cookies,
12    json={"userName": "Starry", "sex": "MALE", "portrait": "images/myresume/default_headpic.png",
13"positionName": '...', "introduce": '....'}
14 )
整体代码如下:
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4'''
5@auther: Starry
6@file: 5.修改个⼈信息.py
7@time: 2018/7/5 11:43
学python需要什么
8'''
9
10import re
11import requests
12
13
14 all_cookies = {}
15>>>>>1、查看登录界⾯ >>>####
16 r1 = (
17    url='passport.lagou/login/login.html',
18    headers={
19'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36', 20'Host':'passport.lagou'
21    }
22 )
23 all_cookies._dict())
24
25 X_Anit_Forge_Token = re.findall(r"X_Anti_Forge_Token = '(.*?)';",r1.text,re.S)[0]
26 X_Anti_Forge_Code = re.findall(r"X_Anti_Forge_Code = '(.*?)';",r1.text,re.S)[0]
27print(X_Anit_Forge_Token,X_Anti_Forge_Code)
28>>>##2.⽤户名密码登录 >>>>>>##
29 r2 = requests.post(
30    url="passport.lagou/login/login.json",
31    headers={
32'Host':'passport.lagou',
33"Referer":"passport.lagou/login/login.html",
34"X-Anit-Forge-Code": X_Anti_Forge_Code,
35"X-Anit-Forge-Token": X_Anit_Forge_Token,
36"X-Requested-With": "XMLHttpRequest",
37'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36', 38"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
39    },
40    data={
41"isValidate":"true",
42"username":"xxx",
43"password":"xxx",
44"request_form_verifyCode":"",
45"submit":""
46    },
47    _dict()
48 )
49 all_cookies._dict())
50
51>>>####3 ⽤户授权 >>>>>
52 r3 = (
53    url='passport.lagou/grantServiceTicket/grant.html',
54    headers={
55'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
56    },
57    allow_redirects = False,
58    cookies = all_cookies
59 )
60 all_cookies._dict())
61
62>>>####4 ⽤户认证 >>>>>
63print('r4',r3.headers['Location'])
64 r4 = (
65    url=r3.headers['Location'],
66    headers={
67'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
68    },
69    allow_redirects=False,
70    cookies=all_cookies
71 )
72 all_cookies._dict())
73
74print('r5',r4.headers['Location'])
75 r5 = (
76    url=r4.headers['Location'],
77    headers={
78'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
79    },
80    allow_redirects=False,
81    cookies=all_cookies
82 )
83 all_cookies._dict())
84
85print('r6',r5.headers['Location'])
86 r6 = (
87    url=r5.headers['Location'],
88    headers={
89'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
90    },
91    allow_redirects=False,
92    cookies=all_cookies
93 )
94 all_cookies._dict())
95
96print('r7',r6.headers['Location'])
97 r7 = (
98    url=r6.headers['Location'],
99    headers={
100'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36' 101    },
102    allow_redirects=False,
103    cookies=all_cookies
104 )
105 all_cookies._dict())
106
107>>>####5. 查看个⼈页⾯ >>>>>
108
109 r5 = (
110    url='www.lagou/resume/myresume.html',
111    headers={
112"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" 113    },
114    cookies = all_cookies
115 )
116
117print("李港")
118
119
120>>>####6. 查看 >>>>>
121 r6 = (
122    url='gate.lagou/v1/neirong/account/users/0/',
123    headers={
124"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36", 125'X-L-REQ-HEADER': "{deviceType:1}",

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论