详解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 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
儿童编程python入门
May 08 Python
django中静态文件配置static的方法
May 20 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
Python  Django 母版和继承解析
Aug 09 Python
python名片管理系统开发
Jun 18 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
Python 实现Mac 屏幕截图详解
Oct 05 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
PHP中英混合字符串截取函数代码
2011/07/17 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
读jQuery之五(取DOM元素)
2011/06/20 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
javascript编程异常处理实例小结
2015/11/30 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
详解React开发必不可少的eslint配置
2018/02/05 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
党员自我评价分享
2013/12/13 职场文书
高中军训感想800字
2014/02/23 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
交通事故案件代理词
2015/05/23 职场文书
出生证明范本
2015/06/15 职场文书
小学见习报告
2015/06/23 职场文书
七年级数学教学反思
2016/02/17 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
python的变量和简单数字类型详解
2021/09/15 Python