Python开发简单爬虫速成教程(MongoDB Navicat、requests模块、XPath基础和lxml模块、实战当当网5星图书排行榜数据抓取+数据存储到MongoDB数据库)

Python开发简单爬虫速成教程

b站学习视频网址

https://www.bilibili.com/video/BV1164y1m7Xb?p=1

一、简介

按照一定的规则,自动抓取网络信息的程序或者脚本,搜索引擎的重要组成。

  • 搜索引擎

  • 数据分析

  • 人工智能

  • 薅羊毛、抢车票

爬虫产品:

神箭手、八爪鱼、造数、后羿采集器

数据储备:

  • python编程基础
  • http
  • 数据库

怎么学:

  • python语法知识

  • python爬虫常用到的几个重要内置库Requests,用于请求网页

  • 学习正则表达式re、Xpath(IxmI)等网页解析工具

  • 开始一些简单的网站爬取,了解爬取数据的过程(当当网图书数据)

  • 与数据库结合,将爬取数据进行存储

安装MongoDB数据库

  • 介于关系型数据库和非关系型数据库之间的产品
  • 本质是非关系型数据库,最像关系数据库
  • 支持的数据结构非常松散,类似json的bson格式
  • 可以存储比较复杂的数据

非关系模型:

  • 列模型,一列为一个记录,分布式数据库,HBase
  • 键值对,redis
  • 文档类,类似键值对,Mongodb

效率非常高,存储在内存中,断电即失,现在也可存储到磁盘中

检查安装是否成功:

image-20210724091237530

修改设置:

/bin/mongod.cfg

image-20210724091652305

右击我的电脑,管理,服务和应用程序,服务,找到MongoDB,点击重新启动。同一个局域网的机器可以连接。

安装Navicat:支持多种数据库的连接

安装教程:Navicat安装教程

使用教程:在 Navicat for MongoDB 使用文档

使用Navicat,进行MongoDB数据库的连接:

注意主机和端口号的设置

二、request模块入门

requests库:

通过Requests库发送http请求:

image-20210724101305407

Requests模块的安装:

cmd直接安装:pip install requests

Requests模块支持的http方法:

  • Get方法:请求资源

  • Post方法:向服务端发送信息和数据,表单提交

  • Head方法:请求资源的一些信息而不是全部信息,用于确认URL的有效性以及资源更新的日期时间

  • Put方法:上传文档

  • Connection方法:客户端想要确定一个明确的连接到远程主机,便于通过Http代理服务器进行SSL加密通信时连接使用,在抓包时使用

【重点】通过requests模块发送get请求

import requests
r=requests.get('http://httpbin.org/ip') #会返回当前主机的一个外网地址
# r1=requests.get('https://www.imooc.com') 
print(r.text) # 输出请求体

cmd查看内网ip:ipconfig

百度查看ip地址:ip地址

【重点】通过requests模块发送post请求

一般出现在html的form表单里面

import requests

r2=requests.post(url='http://httpbin.org/post',data={
   
   'name':'imooc'})
print(r2.text)

通过requests模块的get请求构造url

主要用在get请求里面

image-20210724110613219

data={
   
   "key1":"value1","key2":"value2"}
response=requests.get("http://httpbin.org/get",params=data)
# 查看当前请求的url
print(response.url)

查看响应的返回头和返回体

# 查看响应的返回头
print(response.headers)
# 查看响应的返回体
print(response.text)

返回头:

image-20210724140012986

【重点】请求图片

url='https://www.imooc.com/static/img/index/logo2020.png'
r1=requests.get(url)
# 访问图片返回的是二进制数据,需要用content查看输出
print(r1.content) 

#写入图片数据
with open("imooc.png","wb") as f:
    f.write(r1.content)

图片二进制数据:

image-20210724140620310

写入图片:

image-20210724140646990

查看响应的json数据

r1=requests.get(url="http://httpbin.org/ip")
print(r1.json()) # 整个json对象 {'origin': '124.160.215.146'}

print(r1.json()["origin"]) # json中某一项 124.160.215.146

查看响应状态码

print(r1.status_code)

查看request的请求头

print(r1.request.headers)

image-20210724141149355

请求头可以修改,可以通过构造request请求头

headers={
   
   
    "user-agent":"joseph/v1"
}
r1=requests.get(url="http://httpbin.org/ip",headers=headers)
print(r1.request.headers)

image-20210724141331591

在反爬机制中可以使用,可以模拟win,ipad,手机

三、requests模块进阶

设置连接超时

当请求超时,放弃请求

# 0.0001秒之内返回网页数据
# 超时时间一般设置为2到3秒
start_time=time.time()
r1=requests.get(url="https://www.imooc.com",timeout=2)
end_time=time.time()

print(r1.text)
print(end_time-start_time)

查看响应设置的cookies

可以在headers中查看

也可以通过cookies查看

行为和字典非常的像

r1=requests.get(url="https://www.baidu.com")
print(r1.headers)
print(r1.cookies)
print(r1.cookies["BDORZ"])

image-20210724143511229

在请求中携带cookies

cookies={
   
   
    "username":"joseph"
}
r1=requests.get(url="http://httpbin.org/cookies",cookies=cookies)
print(r1.cookies) # 输出响应设置的cookies
print(r1.text) # 请求url在响应中返回请求的cookies 

image-20210724144021399

证书校验,SSLError问题

request可以为HTTPS请求验证SSL证书,就像web浏览器一样

SSL验证默认是开启的,如果证书验证失败,requests会抛出SSLError

# 关闭SSL校验
r1=requests.get(url="https://www.baina.org",verify=False)
# 方法二:指定网站的SSL证书,但是一般没有
print(r1.text)

异常

  • 网络问题:如DNS查询失败,拒绝连接,会抛出ConnectionError异常

  • Http请求返回了不成功的状态码:HTTPError异常

  • 请求超时:Timeout异常

  • 请求次数超过了设定的最大重定向次数,TooManyRedirects异常

  • 所有request显式抛出的异常都继承自requests.exceptions.RequestException

【重点】保持登录凭据,requests.session(),爬取需登录的网站+定制请求头

http://account.chinaunix.net/login进行登录验证

1.通过get请求访问登录页面,这个时候还没有填写username和password

image-20210724152216258

image-20210724152253422

image-20210724152403350

2.post请求访问登录

第二个使用的token信息就是第一个请求setCookies设置的

时间戳,删除后3位

image-20210724152527355

image-20210724152631963

image-20210724152701794

image-20210724152852463

3.index页面

cookies携带了很多数据,

可以通过定制请求头和设置请求的cookies 进入index页面,可行但太麻烦。

image-20210724152945906

image-20210724153116022

image-20210724153213188

保持登录凭据,从而直接绕过登录,直接进入到index页面:

  • get请求拿token信息

  • post请求提交用户名密码

  • 第三个请求直接访问登录后index页面

定制请求头header

请求头替换添加引号:

采用正则表达式

image-20210724153927872

代码实现,利用requests.session()保存登录凭据
# request.session,创建一个保持登录凭据的session实例
login_session=requests.session()


# 1、get请求,获取token信息
token_url="http://account.chinaunix.net/login?"
headers={
   
   
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Encoding":"gzip, deflate",
    "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "Cache-Control":"no-cache",
    "Host":"account.chinaunix.net",
    "Pragma":"no-cache",
    "Proxy-Connection":"keep-alive",
    "Upgrade-Insecure-Requests":"1",
    "User-Agent":
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值