详解python爬虫系列之初识爬虫


Posted in Python onApril 06, 2019

前言

我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识,做网络爬虫还是需要基本的前端的知识的,下面我们进行我们的爬虫讲解

在进行实战之前,我们先给大家看下爬虫的一般讨论,方便大家看懂下面的实例

详解python爬虫系列之初识爬虫

一、爬汽车之家

汽车之家这个网站没有做任何的防爬虫的限制,所以最适合我们来练手

1、导入我们要用到的模块

import requests
from bs4 import BeautifulSoup

2、利用requests模块伪造浏览器请求

# 通过代码伪造浏览器请求
res = requests.get(https://www.autohome.com.cn/news/)

3、设置解码的方式,python是utf-8,但是汽车之家是用gbk编码的,所以这里要设置一下解码的方式

# 设置解码的方式
res.encoding = "gbk"

4、把请求返回的对象,传递一个bs4模块,生成一个BeautifulSoup对象

soup = BeautifulSoup(res.text,"html.parser")

5、这样,我们就可以使用BeautifulSoup给我们提供的方法,如下是查找一个div标签,且这个div标签的id属性为auto-channel-lazyload-atricle

# find是找到相匹配的第一个标签
div = soup.find(name="div",attrs={"id":"auto-channel-lazyload-article"})
# 这个div是一个标签对象

6、findall方法,是超找符合条件的所有的标签,下面是在步骤5的div标签内查找所有的li标签

li_list = div.find_all(name="li")

7、查找li标签中的不同条件的标签

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、获取标签的属性

# 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方法

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、整体的代码如下

详解python爬虫系列之初识爬虫

二、爬抽屉

这里我们看下如何爬抽屉

1、首先抽屉有做防爬虫的机制,我们在访问的时候必须要加一个请求头

# 实例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

print(chouti.cookies.get_dict())
# {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'JSESSIONID': 'aaaNxWlWjLLKU9CGXDyNw'}

3、转换页面为一个BeautifulSoup对象

# 将页面转换成一个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"))

详解python爬虫系列之初识爬虫

4、下面我们看下如何登陆抽屉

首先我们先通过get方式访问主页

# 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方式进行登陆,

# 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()
    )

详解python爬虫系列之初识爬虫

最后登陆成功后,我们来实现一个点赞的操作,这里要注意 

# 第二次登陆的时候把第一次返回的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)

详解python爬虫系列之初识爬虫

爬抽屉所有的代码如下

# 实例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)

三、爬github

github的登陆是form表单做的,所以我们在登陆github的时候需要把cookies和crsf_token都带上

1、访问github的首页

# 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,然后获取到

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")

详解python爬虫系列之初识爬虫

3、post方式访问登陆页面,携带上用户名和密码,token和cookies

# 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后的操作了

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的所有的代码如下

详解python爬虫系列之初识爬虫

四、爬拉钩网

最后我们来爬一下拉勾网

1、首先get方式访问拉勾网的首页

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、登陆拉钩网,他的请求头稍微有点特殊

详解python爬虫系列之初识爬虫

data很简单,我们直接抓包就可以拿到

主要是请求头中的数据是怎么来的,下面这2个是在我们请求登陆的页面中返回的,由于这2项在script标签中,我们只能通过正则表达式来匹配获取

详解python爬虫系列之初识爬虫

详解python爬虫系列之初识爬虫

详解python爬虫系列之初识爬虫

最后是爬拉勾网的所有的代码

详解python爬虫系列之初识爬虫

以上所述是小编给大家介绍的python爬虫系列之初识爬虫详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
用Python写的图片蜘蛛人代码
Aug 27 Python
python对字典进行排序实例
Sep 25 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
Python列表切片操作实例总结
Feb 19 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 #Python
python基础梳理(一)(推荐)
Apr 06 #Python
详解python持久化文件读写
Apr 06 #Python
python七夕浪漫表白源码
Apr 05 #Python
python浪漫表白源码
Apr 05 #Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 #Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 #Python
You might like
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
php获取字段名示例分享
2014/03/03 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
PHP读取Excel类文件
2017/05/15 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
原生js调用json方法总结
2018/02/22 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Python字典底层实现原理详解
2019/12/18 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
某公司C#程序员面试题笔试题
2014/05/26 面试题
科学发展观演讲稿
2014/09/11 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
钱学森电影观后感
2015/06/04 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
学风建设主题班会
2015/08/17 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
Node.js实现断点续传
2021/06/23 Javascript
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技