- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解python爬虫系列之初识爬虫由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识,做网络爬虫还是需要基本的前端的知识的,下面我们进行我们的爬虫讲解 。
在进行实战之前,我们先给大家看下爬虫的一般讨论,方便大家看懂下面的实例 。
1、爬汽车之家 。
汽车之家这个网站没有做任何的防爬虫的限制,所以最适合我们来练手 。
1、导入我们要用到的模块 。
1
2
|
import
requests
from
bs4
import
beautifulsoup
|
2、利用requests模块伪造浏览器请求 。
1
2
|
# 通过代码伪造浏览器请求
res
=
requests.get(https:
/
/
www.autohome.com.cn
/
news
/
)
|
3、设置解码的方式,python是utf-8,但是汽车之家是用gbk编码的,所以这里要设置一下解码的方式 。
1
2
|
# 设置解码的方式
res.encoding
=
"gbk"
|
4、把请求返回的对象,传递一个bs4模块,生成一个beautifulsoup对象 。
1
|
soup
=
beautifulsoup(res.text,
"html.parser"
)
|
5、这样,我们就可以使用beautifulsoup给我们提供的方法,如下是查找一个div标签,且这个div标签的id属性为auto-channel-lazyload-atricle 。
1
2
3
|
# find是找到相匹配的第一个标签
div
=
soup.find(name
=
"div"
,attrs
=
{
"id"
:
"auto-channel-lazyload-article"
})
# 这个div是一个标签对象
|
6、findall方法,是超找符合条件的所有的标签,下面是在步骤5的div标签内查找所有的li标签 。
1
|
li_list
=
div.find_all(name
=
"li"
)
|
7、查找li标签中的不同条件的标签 。
1
2
3
4
5
6
7
8
|
li_list
=
div.find_all(name
=
"li"
)
for
li
in
li_list:
title
=
li.find(name
=
"h3"
)
neirong
=
li.find(name
=
"p"
)
href
=
li.find(name
=
"a"
)
img
=
li.find(name
=
"img"
)
if
not
title:
continue
|
8、获取标签的属性 。
1
2
3
4
5
6
7
|
# print(title, title.text, sep="标题-->")
# print(neirong, neirong.text, sep="内容-->")
# print(href, href.attrs["href"], sep="超链接-->")
# 获取标签对接的属性
# print(img.attrs["src"])
# ret = requests.get(img_src)
|
9、如果我们下载一个文件,则需要requests.get这个文件,然后调用这个文件对象的content方法 。
1
2
3
4
5
6
7
8
|
src
=
img.get(
"src"
)
img_src
=
src.lstrip(
"/"
)
file_name
=
img_src.split(
"/"
)[
-
1
]
img_src
=
"://"
.join([
"https"
,img_src])
print
(file_name)
ret
=
requests.get(img_src)
with
open
(file_name,
"wb"
) as f:
f.write(ret.content)
|
10、整体的代码如下 。
2、爬抽屉 。
这里我们看下如何爬抽屉 。
1、首先抽屉有做防爬虫的机制,我们在访问的时候必须要加一个请求头 。
1
2
3
4
5
6
|
# 实例1:爬取数据,这个网址有做防爬虫机制,所以需要带一个请求头信息,才能让服务端以为我们是浏览器,不然服务端会把我们的请求当做爬虫行为进行拦截
# 设置一个请求头
chouti
=
requests.get(url
=
"https://dig.chouti.com/"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
})
|
2、这个请求网站会返回一个cookies,通过下面的方法获取cookies 。
1
2
|
print
(chouti.cookies.get_dict())
# {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'jsessionid': 'aaanxwlwjllku9cgxdynw'}
|
3、转换页面为一个beautifulsoup对象 。
1
2
3
4
5
6
7
8
9
|
# 将页面转换成一个beautifulsoup的对象,就可以使用beautifulsoup的方法了
soup
=
beautifulsoup(chouti.text,
"html.parser"
)
news_list
=
soup.find_all(name
=
"div"
,attrs
=
{
"class"
:
"item"
})
for
news
in
news_list:
compont
=
news.find(name
=
"div"
,attrs
=
{
"class"
:
"part2"
})
print
(compont.get(
"share-title"
))
|
4、下面我们看下如何登陆抽屉 。
首先我们先通过get方式访问主页 。
1
2
3
4
5
|
# 1、先查看首页
r1
=
requests.get(url
=
"https://dig.chouti.com/"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
})
|
然后我们通过post方式进行登陆, 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 2、提交用户名和密码进行登陆
r2
=
requests.post(url
=
"https://dig.chouti.com/login"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
},
data
=
{
"phone"
:
"86139252938822"
,
"password"
:
"admin"
,
"onemonth"
:
1
},
cookies
=
r1.cookies.get_dict()
)
|
最后登陆成功后,我们来实现一个点赞的操作,这里要注意 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 第二次登陆的时候把第一次返回的cookies带上,这个是抽屉这个网站的套路,同样这次登陆也会返回一个cookies,但是登陆这次返回的cookies其实是个迷惑我们的cookies,没有用
# print(r2.text)
# 登陆失败返回的信息:{"result":{"code":"21101", "message":"手机号或密码错误", "data":{}}}
# 登陆成功返回的信息:{"result":{"code":"9999", "message":"", "data":{"complatereg":"0","destjid":"cdu_53218132468"}}}
# 如果登陆成功,通过下面的方法就可以把服务端返回的cookies拿到,以后在发请求,带着cookies去就可以了
print
(r2.cookies.get_dict())
# {'puid': 'b11ec95d3b515ae2677a01f6abd5b916', 'gpid': '01cff9a184bd427789429d1dd556f4d2'}
r3
=
requests.post(url
=
"https://dig.chouti.com/link/vote?linksid=25461201"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
},
# cookies=r2.cookies.get_dict(),
cookies
=
r1.cookies.get_dict(),
# 破解抽屉coookies套路
)
# 这次点赞,我们同样带的cookies是第一次登陆主页返回的cookies,而不是登陆成功后返回的cookies
# print(r3.text)
|
爬抽屉所有的代码如下 。
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
|
# 实例1:爬取数据,这个网址有做防爬虫机制,所以需要带一个请求头信息,才能让服务端以为我们是浏览器,不然服务端会把我们的请求当做爬虫行为进行拦截
# 设置一个请求头
chouti
=
requests.get(url
=
"https://dig.chouti.com/"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
})
# print(chouti.text)
print
(chouti.cookies.get_dict())
# {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'jsessionid': 'aaanxwlwjllku9cgxdynw'}
# 将页面转换成一个beautifulsoup的对象,就可以使用beautifulsoup的方法了
soup
=
beautifulsoup(chouti.text,
"html.parser"
)
news_list
=
soup.find_all(name
=
"div"
,attrs
=
{
"class"
:
"item"
})
for
news
in
news_list:
compont
=
news.find(name
=
"div"
,attrs
=
{
"class"
:
"part2"
})
print
(compont.get(
"share-title"
))
# 1、先查看首页
r1
=
requests.get(url
=
"https://dig.chouti.com/"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
})
# r1.cookies.get_dict(),第一次访问主页,服务端就给返回了一个cookies
# 2、提交用户名和密码进行登陆
r2
=
requests.post(url
=
"https://dig.chouti.com/login"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
},
data
=
{
"phone"
:
"8613925293887"
,
"password"
:
"admin123."
,
"onemonth"
:
1
},
cookies
=
r1.cookies.get_dict()
)
# 第二次登陆的时候把第一次返回的cookies带上,这个是抽屉这个网站的套路,同样这次登陆也会返回一个cookies,但是登陆这次返回的cookies其实是个迷惑我们的cookies,没有用
# print(r2.text)
# 登陆失败返回的信息:{"result":{"code":"21101", "message":"手机号或密码错误", "data":{}}}
# 登陆成功返回的信息:{"result":{"code":"9999", "message":"", "data":{"complatereg":"0","destjid":"cdu_53218132468"}}}
# 如果登陆成功,通过下面的方法就可以把服务端返回的cookies拿到,以后在发请求,带着cookies去就可以了
print
(r2.cookies.get_dict())
# {'puid': 'b11ec95d3b515ae2677a01f6abd5b916', 'gpid': '01cff9a184bd427789429d1dd556f4d2'}
r3
=
requests.post(url
=
"https://dig.chouti.com/link/vote?linksid=25461201"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
},
# cookies=r2.cookies.get_dict(),
cookies
=
r1.cookies.get_dict(),
# 破解抽屉coookies套路
)
# 这次点赞,我们同样带的cookies是第一次登陆主页返回的cookies,而不是登陆成功后返回的cookies
# print(r3.text)
|
3、爬github 。
github的登陆是form表单做的,所以我们在登陆github的时候需要把cookies和crsf_token都带上 。
1、访问github的首页 。
1
2
3
4
5
6
7
8
|
# 1、get,访问登陆页面
r1
=
requests.get(url
=
"https://github.com/"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
}
)
# print(r1.cookies.get_dict())
|
2、访问登陆页面,需要在隐藏的input标签中找到token,然后获取到 。
1
2
3
4
5
6
7
8
9
|
r2
=
requests.get(url
=
"https://github.com/login"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
}
)
login_obj
=
beautifulsoup(r2.text,
"html.parser"
)
token
=
login_obj.find(name
=
"form"
,attrs
=
{
"action"
:
"/session"
}).find(name
=
"input"
,attrs
=
{
"name"
:
"authenticity_token"
}).get(
"value"
)
|
3、post方式访问登陆页面,携带上用户名和密码,token和cookies 。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 2、发送post请求,发送用户名和密码,发送的数据要不仅有用户名和密码,还要带上csrf token和cookie,浏览器发什么,我们就发什么
r3
=
requests.post(url
=
"https://github.com/session"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
},
data
=
{
"login"
:
"admin"
,
"password"
:
"admin"
,
"authenticity_token"
:token
},
cookies
=
r2.cookies.get_dict()
)
|
4、以后就可以携带r3这个请求访问的cookies进行登陆github后的操作了 。
1
2
3
4
5
6
7
8
9
10
11
|
obj
=
beautifulsoup(r3.text,
"html.parser"
)
# print(obj.find_all(name="img",attrs={"alt":"@admin"}))
# 3、发送get请求,访问这个路径:https://github.com/settings/profile
r4
=
requests.get(url
=
"https://github.com/settings/profile"
,
cookies
=
r3.cookies.get_dict()
)
print
(r4.text)
|
爬github的所有的代码如下 。
4、爬拉钩网 。
最后我们来爬一下拉勾网 。
1、首先get方式访问拉勾网的首页 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import
requests
from
bs4
import
beautifulsoup
# 如果遇到登陆的密码被加密了有两种解决办法
# 1、获取他的加密方式,然后手动破解
# 2、直接抓包把加密后的数据发过去就可以了
# 1、访问登陆页面
l1
=
requests.get(url
=
"https://passport.lagou.com/login/login.html"
,
headers
=
{
"user-agent"
:
"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
})
# print(l1.text)
|
2、登陆拉钩网,他的请求头稍微有点特殊 。
data很简单,我们直接抓包就可以拿到 。
主要是请求头中的数据是怎么来的,下面这2个是在我们请求登陆的页面中返回的,由于这2项在script标签中,我们只能通过正则表达式来匹配获取 。
最后是爬拉勾网的所有的代码 。
以上所述是小编给大家介绍的python爬虫系列之初识爬虫详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:https://www.cnblogs.com/bainianminguo/p/10660560.html 。
最后此篇关于详解python爬虫系列之初识爬虫的文章就讲到这里了,如果你想了解更多关于详解python爬虫系列之初识爬虫的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!