爬虫项目实战(一)

大纲:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、爬虫介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、网络请求requests
在这里插入图片描述
1、requests库的基本使用
在这里插入图片描述
2、GET&POST
在这里插入图片描述
在这里插入图片描述
查看电脑当前的python版本在cmd
中输入命令:python -V
在这里插入图片描述
如果电脑中有两个python环境,例如想在python3中下载时,使用命令:pip3 install requests 即可

接下来以爬取古诗文网为例https://www.gushiwen.org/
在这里插入图片描述
在这里插入图片描述
打开古诗文网址,按F12,查看源代码
在这里插入图片描述
在这里插入图片描述
而之前代码中显示是由python代码的爬虫程序访问的。
注:python的第三方库均可在https://pypi.org中下载
在这里插入图片描述
小插曲(一)—解决bug
摘录自https://blog.csdn.net/greatpresident/article/details/8209712?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
此时,程序报错,UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa9’ in position 57096: illegal multibyte sequence(UnicodeEncodeError: ‘gbk’编解码器不能在57096位置编码字符’\xa9’:非法多字节序列)大致是编码出了问题
使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position … 这个问题。 网络上有很多类似的文件讲述如何解决这个问题,但是无非就是encode,decode相关的,这是导致该问题出现的真正原因吗?不是的。 很多时候,我们使用了decode和encode,试遍了各种编码,utf8,utf-8,gbk,gb2312等等,该有的编码都试遍了,可是编译的时候仍然出现: UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position XXX。 崩溃了。
在windows下面编写python脚本,编码问题很严重。
将网络数据流写入文件时时,我们会遇到几个编码:
1: #encoding=‘XXX’ 这里(也就是python文件第一行的内容)的编码是指该python脚本文件本身的编码,无关紧要。只要XXX和文件本身的编码相同就行了。 比如notepad++ "格式"菜单里面里可以设置各种编码,这时需要保证该菜单里设置的编码和encoding XXX相同就行了,不同的话会报错
2:网络数据流的编码 比如获取网页,那么网络数据流的编码就是网页的编码。需要使用decode解码成unicode编码。
3:目标文件的编码 要将网络数据流的编码写入到新文件,那么我么需要指定新文件的编码。写文件代码如:
f.write(txt)
那么txt是一个字符串,它是通过decode解码过的字符串。关键点就要来了:目标文件的编码是导致标题所指问题的罪魁祸首。如果我们打开一个文件:
f = open(“out.html”,“w”)
在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。 解决的办法就是,改变目标文件的编码:
f = open(“out.html”,“w”,encoding=‘utf-8’)
问题解决
在这里插入图片描述
定义请求头:
在这里插入图片描述
因为网站检测到是爬虫程序访问,直接拒绝
在这里插入图片描述
在这里插入图片描述
小插曲(二)–其他伪装浏览器的User-Agent写法(前五种就够用了)
摘录自https://www.cnblogs.com/zrmw/p/9332801.html

  1. Chrome
    Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1

  2. Firefox
    Win7:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0

  3. Safari
    Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50

  4. Opera
    Win7:Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50

  5. IE
    Win7+ie9:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)

Win7+ie8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)

WinXP+ie8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)

WinXP+ie7:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

WinXP+ie6:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

  1. 傲游
    傲游3.1.7在Win7+ie9,高速模式:
    Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12

傲游3.1.7在Win7+ie9,IE内核兼容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)

  1. 搜狗
    搜狗3.0在Win7+ie9,IE内核兼容模式:
    Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)

搜狗3.0在Win7+ie9,高速模式:
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0

  1. 360
    360浏览器3.0在Win7+ie9:
    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)

  2. QQ浏览器
    QQ浏览器6.9(11079)在Win7+ie9,极速模式:
    Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201

QQ浏览器6.9(11079)在Win7+ie9,IE内核兼容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201

  1. 阿云浏览器
    阿云浏览器1.3.0.1724 Beta(编译日期2011-12-05)在Win7+ie9:
    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

post请求方式:
在这里插入图片描述
ajax可以做到不刷新不加载 直接发送消息,是前端的一门技术。

import requests
#定义请求的url
url = 'https://fanyi.baidu.com/sug'
#定义请求头信息
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
#post发送的数据
# data_v = input("please enter the word:")
data = {'kw':'你好'}
#发送请求
res = requests.post(url=url,headers=headers,data=data)
#接受返回的数据
# print(res.status_code)
# print(res.json())
code = res.status_code
if code == 200:
    print('请求成功')
    data = res.json()
    if data['errno'] == 0:
        print('响应成功')
        k = data['data'][0]['k']
        v = data['data'][0]['v'].split(';')[-2]
        print(k,'====',v)

4、requests处理cookie信息
什么是cookie?有什么作用?
http请求是无状态的请求协议,不会记住用户的状态和信息,也不清楚用户在这之前访问过什么,因为网站需要记录用户是否登陆时,就需要在用户登录后,就需要把用户的信息记录在当前用户的浏览器中,记录的内容就是cookie,用户使用当前的浏览器继续访问这个服务器时,会主动携带这个网站设置的cookie信息来确认用户的信息。
cookie会在浏览器中记录信息,并在访问时携带此信息
1)浏览器更换或删除cookie后,信息被删除
2)cookie在浏览器中记录的信息是不安全的,因为不能够记录敏感信息
session:
是在服务器端给每个用户设置一个sessionID,并且把这个sessionID设置在用户的浏览器中,也就是设置为cookie
在这里插入图片描述
在这里插入图片描述
在写入的文件中寻找之前用户的订单号
注:在pycharm总ctrl+F进行搜索
在这里插入图片描述
显示搜索失败,再搜索login发现此时为登陆界面
在这里插入图片描述
原因是因为此时的python爬虫程序没有携带cookie信息,没有用户信息,因此无法登陆,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上均为手动复制粘贴过程,以下尝试程序自动抓取信息
使用requests中的session方法,最终请求的目标地址:http://www.rrys2019.com/user/user
在这里插入图片描述
登陆要请求的url :http://www.rrys2019.com/user/user
登陆要用的数据:
account: mier~
password: MIer112233…
remember: 1
url_back: http://www.rrys2019.com/user/user
在这里插入图片描述

import requests
#需要请求的目标地址
url = "http://www.rrys2019.com/user/user"
#登陆请求的地址
loginurl = "http://www.rrys2019.com/User/Login/ajaxLogin"
#定义请求头信息
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
#如果需要爬虫程序主动记录cookie并且携带cookie,那么在使用requests之前session
#并且使用session方法返回的对象发送请求即可
req = requests.session()
#登陆请求时的数据
data = {
    "account":"mier~",
    "password":"MIer112233..",
    "remember":"1",
    "url_back":"http://www.rrys2019.com/"
}
res = req.post(url=loginurl,headers=headers,data=data)
#判断状态
code = res.status_code
print(code)
if code == 200:
    #发起新的请求,去获取目标数据
    res = req.get(url=url,headers=headers)
    with open('rr.html','w',encoding='utf-8') as fp:
        fp.write(res.text)

已经获取到登陆需要的数据,如下:
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值