python爬虫requests实战_Python爬虫之requests库网络爬取简单实战

实例1:直接爬取网页

实例2 : 构造headers,突破访问限制,模拟浏览器爬取网页

实例3 : 分析请求参数,构造请求参数爬取所需网页

实例4: 爬取图片

实例5: 分析请求参数,构造请求参数爬取所需信息

实例1:京东商品页面的爬取

170c52af02a1

image.png

现在我们利用requests库爬取这个页面的商品信息

首先引入requests库

import requests

然后爬取页面

r =requests.get("https://item.jd.com/4645290.html")

然后我们测试状态码,编码和内容

r.status_code

r.encoding

r.text[:1000]

170c52af02a1

image.png

到此,说明我们已经成功利用requests库获取到了商品页面的信息。

完整的爬取代码

import requests

url = "https://item.jd.com/4645290.html"

try:

r = requests.get(url)

r.raise_for_status()

r.encoding = r.apparent_encoding

print(r.text[:1000])

except:

print("爬取失败")

实例2 : 亚马逊商品页面爬取

我们选取如下界面进行爬取

170c52af02a1

image.png

首先,我们按照之前的步骤进行爬取

引入requests库,然后get,判断status_code

r = requests.get("https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071")

r.status_code

显示503,说明服务器错误,

503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

我们查看编码发现

r.encoding

'ISO-8859-1'

我们需要转换编码

r.encoding = r.apparent_encoding

然后显示爬取内容,发现

170c52af02a1

image.png

发现出现了错误。

网页告诉我们出现了错误,但只要我们正确获取到了网页的内容,就说明网路方面肯定是没有错误的。这说明亚马逊对爬虫有限制,一般对爬虫限制的话,就是robots协议,其中还可以对访问对象进行限制,限制只能通过相应的浏览器访问,而限制爬虫的访问。

我们通过request.header查看我们发给亚马逊的请求头部到底是什么内容

170c52af02a1

image.png

我们看到信息中的user-agent的信息是python。这说明我们的程序诚实的告诉亚马逊,这个程序是python的requests库发起的请求。

亚马逊的服务器看到这是个爬虫请求,所以就返回错误的信息。

那么我们如何才能访问呢?

我们都知道requests库可以更改请求的头部信息,我们可以模拟一个浏览器的请求

我们构造一个键值对

kv = {'user-agent':'Mozilla/5.0'}

url = "https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071"

r = requests.get(url, headers = kv)

我们查看状态码,发现为200,说明这一次成功获取到了页面的内容

170c52af02a1

image.png

完整的爬取代码

import requests

url = "https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071"

try:

kv = {'user-agent':'Mozilla/5.0'}

r = requests.get(url, headers = kv)

r.raise_for_status()

r.encoding = r.apparent_encoding

print(r.text[1000:2000])

except:

print("爬取失败")

实例3: 百度/360搜索关键词提交爬虫

搜索关键词提交的接口:

https://www.baidu.com/s?ie=UTF-8&wd=keyword

通过requests的params参数,构造查询参数

完整的代码

import requests

keyword = "刘德华"

url = "http://www.baidu.com/s?ie=UTF-8"

try:

kv = {"wd":keyword}

r = requests.get(url, params = kv)

print(r.request.url)

r.raise_for_status()

print(len(r.text))

print(r.text)

except:

print("爬取失败")

实例4 网络图片的爬取和存储

网络中图片连接的格式

http://www.example.com/picture.jpg

假设我们现在要爬取

http://www.nationalgeographic.com.cn/

图片连接:

http://image.nationalgeographic.com.cn/2015/0121/20150121033625957.jpg

完整的爬取代码:

import requests

import os

url = "http://image.nationalgeographic.com.cn/2015/0121/20150121033625957.jpg"

root = "D://pics//"

path = root + url.split('/')[-1]

try:

if not os.path.exists(root):

os.mkdir(root)

if not os.path.exists(path):

r = requests.get(url)

with open(path,'wb') as f:

f.write(r.content)

f.close()

print("文件保存成功")

else :

print("文件已存在")

except:

print("爬取失败")

实例5 IP地址归属地查询

我们分析它请求的过程,发现它的请求接口就是在地址后附加参数,类似于百度搜索

http://m.ip138.com/ip.asp?ip=125.220.159.160

所以我们可以构造查询参数,发送给服务器,然后获取返回的结果

完整代码

import requests

url = "http://m.ip138.com/ip.asp?"

ip = "125.220.159.160"

kv = {"ip":ip}

try:

r = requests.get(url, params = kv)

r.raise_for_status()

r.encoding = r.apparent_encoding

print(r.text)

except:

print("爬取失败")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某制冷设备制造厂商

某制冷设备制造厂商 该公司是一家以钣金加工,制冷设备制造、销售为主的公司,其产品广泛应用于高级宾馆、饭店及大型餐饮设施等。销售网点遍及日本、北美、欧洲及东南亚,产品深受世界各地用户的欢迎。 该公司原先使用的是TPICS生产管理系统&am…

原生JS实现的DOM操作笔记(草稿整理)

原生JS实现的DOM一系列操作参考: 原生JavaScript封装DOM库siblings: 原生JS-查找相邻的元素-siblings方法的实现addClass,removeClass,hasClass,toggleClass:原生js添加删除class原生js添加删除class 代码如下: var dom {/** 功能说明&…

简单的Gradle Java插件自定义

正如我在“ 用Gradle构建Java的初步了解”一文中所展示的那样,当人们使用Java插件并将文件和目录放置在该插件期望的位置时, Gradle尤其适用于构建Java应用程序的基础知识(惯例-基于项目的布局 )。 但是,并非总是有一种…

k8s 重点

这几个月参与了几场面试,设计了多道面试题,觉得可以综合考察应聘人对 kubernetes的掌握情况。在这里分享下,供应聘人自查以及其他面试官参考。 这些面试题的设计初衷并不是考察 kubernetes 的使用。这种笔者认为较为流于表面,因为…

python中print的用法_python中print用法

print用法 参考文档: https://blog.csdn.net/sinat_28576553/article/details/81154912 目录 一、print()函数概述 二、变量的输出 三、数据的格式化输出 3.1 %字符 3.2 最小字段宽度和精度 3.3 转换标志 3.4 格式字符归纳 四、换行与防止换行 一、print()函数概述 …

java 播放.pcm文件,java播发PCM文件

java播放PCM文件import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioSystem;import javax.sound.sa…

02 re模块

# re的工作是在python中执行正则表达式 import re# # find # result re.findall("\d", "baby的电话号是: 185123456789") # print(result) # # it re.finditer("\d", "baby123456789的电话号是: 185123456789") # for el in it: # …

网页中二维码识别规则

识别规则 这里采用的逻辑是截屏识别,当客户端发现用户在网页的img标签内进行长按操作时,会立刻截屏并且启动二维码识别算法。所以这里用于二维码识别的图片是截屏,而不是之前有人提到的img标签中的图片。 为什么要用截屏,这也是…

使用Mockito测试Spring组件

我认为,能够对弹簧组件进行单元测试而无需使用临时测试配置加载完整的弹簧上下文,这是一个很大的优势,因为它干净,易于维护,编写速度更快,更改平滑。 实现此目标的一种方法是使用Mockito并告诉他用Mocks &…

python数字转换_Python实现中文数字转换为阿拉伯数字的方法示例

本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法。分享给大家供大家参考,具体如下: 一、需求 今天写了三千二百行代码。 今天写了3200行代码。 两行意思相同,只是表达方式不太能够,统一掉。 二、原理 数字的特征是 数字 …

LeetCode第14题:最长公共前缀

题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar"…

臭名昭著的sun.misc.Unsafe解释

Java虚拟机的最大竞争对手可能是托管C#等语言的Microsoft CLR 。 CLR允许编写不安全的代码作为低级编程的入口,这在JVM上很难实现。 如果您需要Java中的此类高级功能,则可能会被迫使用JNI ,这需要您了解一些C并Swift导致代码紧密耦…

主从复制

五 主从复制 Replication(重要!!!!!!) 5.1、介绍 基于主库二进制日志实时恢复到备库。 5.2、原理 5.2.1 主从复制的前提 (1)两台或两台以上数据库实例 (2)主库…

手机号正则表达 php,php 手机号码正则表达试程序代码_PHP教程

代码如下function funcMtel($str)//手机号码正则表达试{return (preg_match(“/(?:13d{1}|15[03689])d{8}$/”,$str))?true:false;}测试18678785887返回为false原因分析,查看了发现上面正则只能验证以13,15开头的,自然18开头的是不可以用的修改后代码如…

python输出格式控制_Python3.x那些事儿:[50]多种多样的输出格式

目前有两种方式来格式化输出格式,第一种就是自己动手来进行字符串的操作,虽然麻烦,但是都能实现。第二种方式就是使用str.format()函数。 string模块包含了一个Template类,这个类提供了把值替换成字符串的方法。 python提供把任意…

暑假第十五测

题解: 第一题: 20%枚举长度和每个子串,O(len)判断,随机情况复杂度可过 40%同样枚举长度,然后两个指针卡出区间,O(1)[或O(26)//可能可过?]判断 50%既然知道了40%的做法那…

扩展Spring Batch –步骤分区

在之前的几篇文章中,我们已经讨论了如何启动和运行Spring Batch。 现在,我们将开始讨论可用于扩展Spring Batch的一些策略。 本文将重点介绍如何对步骤进行分区,以使该步骤具有多个线程,每个线程并行处理一块数据。 如果您有大量…

zabbix磁盘的自动发现与磁盘指标监控

由于最近项目上需要对服务器监控进行规范化监控,再磁盘这块有几种方式 1.如果每台设备的磁盘是一样的 比如都有vda,vdb两块磁盘那么可以采用 1.1 每台客户端写脚本,服务端每台设备去加上监控项(------最次的手段-------------) 1.…

[代码笔记]VUE路由根据返回状态判断添加响应拦截器

//返回状态判断(添加响应拦截器)Axios.interceptors.response.use(res > {//对响应数据做些事if (res.data && !res.data.success) {Message({// 饿了么的消息弹窗组件,类似toastshowClose: true,message: res.data.error.message.message? res.data.error.messag…

php前台用户权限开通,vue实现网站前台的权限管理

本文主要介绍了基于vue实现网站前台的权限管理(前后端分离实践),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。Javascript做为当下的热门语言,用途很广泛&#xff0c…