路飞学城-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小时内删除。
六年级信息技术教案学习程序设计和人工智能基础
« 上一篇
Python实训项目介绍与实践
下一篇 »
推荐文章
热门文章
-
随机森林算法的改进方法
2024-10-02 -
基于随机森林算法的风险预警模型研究
2024-10-02 -
Python中的随机森林算法详解
2024-10-02 -
随机森林发展历史
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(八)
2024-10-02 -
随机森林回归模型原理
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(六)
2024-10-02 -
如何使用随机森林进行时间序列数据预测(四)
2024-10-02 -
如何使用随机森林进行异常检测(六)
2024-10-02 -
随机森林算法和grandientboosting算法 -回复
2024-10-02 -
随机森林方法总结全面
2024-10-02 -
随机森林算法原理和步骤
2024-10-02 -
随机森林的原理
2024-10-02 -
随机森林 重要性
2024-10-02 -
随机森林算法
2024-10-02 -
机器学习中随机森林的原理
2024-10-02 -
随机森林算法原理
2024-10-02 -
使用计算机视觉技术进行动物识别的技巧
2024-10-02 -
基于crf命名实体识别实验总结
2024-10-02 -
transformer预测模型训练方法
2024-10-02
最新文章
-
随机森林算法介绍及R语言实现
2024-10-02 -
基于随机森林优化的神经网络算法在冬小麦产量预测中的应用研究_百度文 ...
2024-10-02 -
基于正则化贪心森林算法的情感分析方法研究
2024-10-02 -
随机森林算法和grandientboosting算法
2024-10-02 -
基于随机森林的图像分类算法研究
2024-10-02 -
随机森林结合直接正交信号校正的模型传递方法
2024-10-02
发表评论