python爬虫的4个实例

python爬虫的4个实例文章目录1、京东商品页面的爬取2、亚马逊商品页面的爬取3、百度、360搜索关键字提交1、京东商品页面的爬取爬虫具体流程可以参照前一篇博客:https://blog.csdn.net/weixin_42515907/article/details/87932185importrequestsurl="https://item.jd.com/3112072.html"try:…

大家好,又见面了,我是你们的朋友全栈君。

可以先看
网络爬虫基础知识,然后结合下面的实例学习爬虫的常用方法。

1、京东商品页面的爬取

import requests
url = "https://item.jd.com/3112072.html"
try:
    r = requests.get(url)
    r.raise_for_status()
    #查看状态信息,返回的是200,说明返回信息正确并且已经获得该链接相应内容。
    r.encoding = r.apparent_encoding
    #查看编码格式,这个格式是jbk,说明我们从http的头部分已经可以解析出网站信息。
    print(r.text[:1000])
except:
    print("爬取失败")

结果:

C:\Users\Admin\Anaconda3\python.exe "E:/2019/May 1/spider JD.py"
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
    <!-- shouji -->
    <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
    <title>【全棉时代棉柔巾】全棉时代 居家洁面纯棉柔巾 纯棉抽纸巾湿水可用 洗脸巾擦脸巾20cm*20cm 6包/提【行情 报价 价格 评测】-京东</title>
    <meta name="keywords" content="PurCotton棉柔巾,全棉时代棉柔巾,全棉时代棉柔巾报价,PurCotton棉柔巾报价"/>
    <meta name="description" content="【全棉时代棉柔巾】京东JD.COM提供全棉时代棉柔巾正品行货,并包括PurCotton棉柔巾网购指南,以及全棉时代棉柔巾图片、棉柔巾参数、棉柔巾评论、棉柔巾心得、棉柔巾技巧等信息,网购全棉时代棉柔巾上京东,放心又轻松" />
    <meta name="format-detection" content="telephone=no">
    <meta http-equiv="mobile-agent" content="format=xhtml; url=//item.m.jd.com/product/3112072.html">
    <meta http-equiv="mobile-agent" content="format=html5; url=//item.m.jd.com/product/3112072.html">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <link rel="canonical" href="//item.jd.com/3112072.html"/>
        <link rel="dns-prefetch" href="//misc.360buyimg.com"/>
    <link rel="dns-prefetch" href="//static.360buyimg.com"/>
    <link rel="dns-prefetch" href="

Process finished with exit code 0

2、亚马逊商品页面的爬取

import requests
url = "https://www.amazon.cn/dp/B01M8L5Z3Y/ref=sr_1_1?ie=UTF8&qid=1551540666&sr=8-1&keywords=%E6%9E%81%E7%AE%80"
try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失败")

结果:
和爬取京东商品一样的操作,但是并没有爬取到商品信息,因此我们联想到可能是亚马逊限制了我们的爬虫访问。

限制网络爬虫的方法:
来源审查: 检查来访HTTP协议头的User – Agent域,只响应浏览器或友好爬虫的访问。
发布公告: Robots协议,告知所有爬虫网站的爬取策略,要求爬虫遵守。

import requests
url = "https://www.amazon.cn/dp/B01M8L5Z3Y/ref=sr_1_1?ie=UTF8&qid=1551540666&sr=8-1&keywords=%E6%9E%81%E7%AE%80"
r = requests.get(url)
print(r.status_code)
print(r.encoding)
print(r.request.headers)   #Response对象包含request请求,通过r.request.headers查看我们发给亚马逊的request请求的头部倒是是什么内容。

可以看到头部有一个字段是’User-Agent’: ‘python-requests/2.18.4’,说明我们的爬虫告诉亚马逊服务器这次的访问是由一个python的requests库的程序产生的。而亚马逊的来源审查可能不支持这样的访问。

那么我们可以试着更改头部信息,模拟一个浏览器向亚马逊发送请求,操作如下:

import requests
kv = {'User-Agent': 'Mozilla/5.0'}      # 是一个标准的浏览器的身份标识的字段
url = "https://www.amazon.cn/dp/B07G7K1Z98/ref=sr_1_3?ie=UTF8&qid=1551539393&sr=8-3&keywords=%E5%B0%8F%E9%B8%9F%E8%80%B3%E6%9C%BA"
r = requests.get(url,headers=kv)        #注意这里要加headers,因为headers已经更该过。
print(r.status_code)
print(r.request.headers)
print(r.text[1000:2000])

结果:

C:\Users\Admin\Anaconda3\python.exe "E:/2019/May 1/spider Amazon.py"
200
{'User-Agent': 'Mozilla/5.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

(function(d,e){function h(f,b){if(!(a.ec>a.mxe)&&f){a.ter.push(f);b=b||{};var c=f.logLevel||b.logLevel;c&&c!==k&&c!==m&&c!==n&&c!==p||a.ec++;c&&c!=k||a.ecf++;b.pageURL=""+(e.location?e.location.href:"");b.logLevel=c;b.attribution=f.attribution||b.attribution;a.erl.push({ex:f,info:b})}}function l(a,b,c,e,g){d.ueLogError({m:a,f:b,l:c,c:""+e,err:g,fromOnError:1,args:arguments},g?{attribution:g.attribution,logLevel:g.logLevel}:void 0);return!1}var k="FATAL",m="ERROR",n="WARN",p="DOWNGRADED",a={ec:0,ecf:0,
pec:0,ts:0,erl:[],ter:[],mxe:50,startTimer:function(){a.ts++;setInterval(function(){d.ue&&a.pec<a.ec&&d.uex("at");a.pec=a.ec},1E4)}};l.skipTrace=1;h.skipTrace=1;h.isStub=1;d.ueLogError=h;d.ue_err=a;e.onerror=l})(ue_csm,window);

ue.stub(ue,"event");ue.stub(ue,"onSushiUnload");ue.stub(ue,"onSushiFlush");

var ue_url='/gp/product/B07G7K1Z98/uedata/unsticky/460-8525492-7331338/NoPageType/ntpoffrw',
ue_sid='460-8525492-7331338',
ue_mid='AAHKV2X7AFYLW',
ue_sn='www.amazon.cn',
ue_furl='fls-cn.

Process finished with exit code 0

可见,更改User-Agent属性之后的爬虫可以正常爬取信息。
尝试和修改后的爬虫程序如下:

import requests
url = "https://www.amazon.cn/dp/B07G7K1Z98/ref=sr_1_3?ie=UTF8&qid=1551539393&sr=8-3&keywords=%E5%B0%8F%E9%B8%9F%E8%80%B3%E6%9C%BA"
kv = {'User-Agent': 'Mozilla/5.0'}      # 是一个标准的浏览器的身份标识的字段
try:
    r = requests.get(url, headers=kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失败")
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139896.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月7日 下午9:00
下一篇 2022年5月7日 下午9:00


相关推荐

  • vrtrix数据手套

    vrtrix数据手套

    2026年3月15日
    1
  • vue-cli设置proxy代理

    vue-cli设置proxy代理Proxy 是什么 proxy 是 ES6 中就存在的 用于修改某些操作的默认行为 可以理解成在目标对象前设一个拦截层 因此也叫 代理器 如果你的前端应用和后端 API 服务器没有运行在同一个主机上 你需要在开发环境下将 API 请求代理到 API 服务器 这个问题可以通过 vue config js 中的 devServer proxy 选项来配置 Proxy 的语法 ES6 原生提供的 Proxy 语法很简单 用法如下 letproxy newProxy target handler 如

    2026年3月16日
    2
  • js往对象中添加属性

    js往对象中添加属性首先 定义一个要添加进去的属性及属性值 letobj a 123 将要被添加的对象 letobj1 c 1 d 2 使用 Object assign 将两个对象合并 lettwoobj Object assign obj1 obj 两个注意的点 用一个新的名称来接受 Object assign 的值 不要用 obj1 来接受 会报错 第一个参数是原来的对象 第二个是要添加进去的对象

    2026年3月16日
    3
  • 推荐10个必装的OpenClaw skill,提高你的小龙虾的技能

    推荐10个必装的OpenClaw skill,提高你的小龙虾的技能

    2026年3月13日
    2
  • android 点餐系统「建议收藏」

    android 点餐系统「建议收藏」      最近进入一家新公司,这家公司是做手机软件开发的。现在自己是试习期,主要任务是看书。看了有一个月了实在是无聊,就想做个手机软件来玩玩。想到之前看到一篇报道,台湾有家餐饮公司用IPAD给客户自助点餐。我就想再android系统上做一下。想了也有一个多星期了,准备开始开工了。     系统主要是四个模块。顾客端,系统管理端,厨师端,数据库端。它们的主要流程如下:     其他的系统分析

    2022年6月19日
    49
  • java outputstream转为inputstream(java传递流)

    本文转自 https://blog.csdn.net/lmy86263/article/details/60479350在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的。1、InputStream转化为String1.1JDK原生提供方法一:byte[]bytes=newbyt…

    2022年4月16日
    78

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号