详解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 21 Python
python实现查询IP地址所在地
Mar 29 Python
简单谈谈Python流程控制语句
Dec 04 Python
解读python logging模块的使用方法
Apr 17 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
python解析yaml文件过程详解
Aug 30 Python
python已协程方式处理任务实现过程
Dec 27 Python
Python能做什么
Jun 02 Python
Python之字典对象的几种创建方法
Sep 30 Python
对Pytorch 中的contiguous理解说明
Mar 03 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 Python
Python 多线程处理任务实例
Nov 07 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依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python测试人员需要掌握的知识
2018/02/08 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
Python使用进程Process模块管理资源
2020/03/05 Python
什么是python类属性
2020/06/10 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
日本小田急百货官网:Odakyu
2018/07/19 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
行政经理的岗位职责
2013/11/23 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
安全施工标语
2014/06/07 职场文书
七夕活动策划方案
2014/08/16 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
原告代理词范文
2015/05/25 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
Python如何将list中的string转换为int
2022/07/15 Ruby