网络爬虫(二):利用urllib2通过指定的URL抓取网页内容

尝试先爬取新闻链接,然后爬取链接后的正文 from lxml import html import requests from pyquery import PyQuery as pq from urllib.parse import urljoin import time from threading import Thread # 获取全部页的网址 def all_url(url): page = 1 while page <= 50: urls = r"https://3g.163.com/touc. 阅读详情

版本号:Python2.7.5,Python3改动较大,各位另寻教程。

所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 
类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源。


在Python中,我们使用urllib2这个组件来抓取网页。
urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。

它以urlopen函数的形式提供了一个非常简单的接口。

最简单的urllib2的应用代码只需要四行。

我们新建一个文件urllib2_test01.py来感受一下urllib2的作用:

import urllib2;

#将url传给urllib2的urlopen方法,得到response
response = urllib2.urlopen('http://www.baidu.com/');
#response调用read方法
html = response.read();
print html;


按下F5可以看到运行的结果:


我们可以打开百度主页,右击,选择查看源代码(火狐OR谷歌浏览器均可),会发现也是完全一样的内容。

也就是说,上面这四行代码将我们访问百度时浏览器收到的代码们全部打印了出来。

这就是一个最简单的urllib2的例子。


除了"http:",URL同样可以使用"ftp:","file:"等等来替代。

HTTP是基于请求和应答机制的:

客户端提出请求,服务端提供应答。


urllib2用一个Request对象来映射你提出的HTTP请求。

在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,

通过调用urlopen并传入Request对象,将返回一个相关请求response对象,

这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。

我们新建一个文件urllib2_test02.py来感受一下:

import urllib2;

#将url传给urllib2.Request,得到一个request
request = urllib2.Request('http://www.baidu.com');   
#将request传给urllib2的urlopen方法,得到response
response = urllib2.urlopen(request);
#response调用read方法
html = response.read();
print html;

可以看到输出的内容和test01是一样的。

urllib2使用相同的接口处理所有的URL头。例如你可以像下面那样创建一个ftp请求。

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. request = urllib2.Request('ftp://example.com/')  
在HTTP请求时,允许你做额外的两件事。

1.发送data表单数据

这个内容相信做过Web端的都不会陌生,

有时候你希望发送一些数据到URL(通常URL与CGI[通用网关接口]脚本,或其他WEB应用程序挂接)。

在HTTP中,这个经常使用熟知的POST请求发送。

这个通常在你提交一个HTML表单时由你的浏览器来做。

并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。

一般的HTML表单,data需要编码成标准形式。然后做为data参数传到Request对象。

编码工作使用urllib的函数而非urllib2。

我们新建一个文件urllib2_test03.py来感受一下:

import urllib;    
import urllib2;   

values = {"username":"277834647@qq.com",
          "password":"21.5Itispowerful"
          };
data = urllib.urlencode(values);# 编码工作

url = "https://passport.youkuaiyun.com/account/login?from=http://my.youkuaiyun.com/my/mycsdn";# 优快云登陆页面

request = urllib2.Request(url,data);# 发送请求同时传data表单  
response = urllib2.urlopen(request);#接受反馈的信息
html = response.read();#读取反馈的内容
print html;

如果没有传送data参数,urllib2使用GET方式的请求。

GET和POST请求的不同之处是POST请求通常有"副作用",

它们会由于某种途径改变系统状态(例如提交成堆垃圾到你的门口)。

Data同样可以通过在Get请求的URL本身上面编码来传送。

import urllib;    
import urllib2;   

values = {};
values['username'] = "277834647@qq.com";
values['password'] = "21.5Itispowerful";
data = urllib.urlencode(values);# 编码工作

url = "https://passport.youkuaiyun.com/account/login?from=http://my.youkuaiyun.com/my/mycsdn";# 优快云登陆页面
geturl = url+"?"+data;

request = urllib2.Request(url);# 发送请求同时传data表单  
response = urllib2.urlopen(request);#接受反馈的信息
html = response.read();#读取反馈的内容
print html;

这样就实现了Data数据的Get传送。


2.设置Headers到http请求

有一些站点不喜欢被程序(非人为访问)访问,或者发送不同版本的内容到不同的浏览器。

默认的urllib2把自己作为“Python-urllib/x.y”(x和y是Python主版本和次版本号,例如Python-urllib/2.7),

这个身份可能会让站点迷惑,或者干脆不工作。

浏览器确认自己身份是通过User-Agent头,当你创建了一个请求对象,你可以给他一个包含头数据的字典。

下面的例子发送跟上面一样的内容,但把自身模拟成Internet Explorer。

(多谢大家的提醒,现在这个Demo已经不可用了,不过原理还是那样的)。

import urllib    
import urllib2    
  
url = 'http://www.someserver.com/cgi-bin/register.cgi';
  
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)';
values = {'name' : 'WHY',    
          'location' : 'SDU',    
          'language' : 'Python' 
         };
  
headers = { 'User-Agent' : user_agent };
data = urllib.urlencode(values);
request = urllib2.Request(url, data, headers);
response = urllib2.urlopen(request);  
the_page = response.read();

原文链接:http://blog.youkuaiyun.com/pleasecallmewhy/article/details/8923067

静态网页爬虫教程(2)链接和标题的提取 初战告捷,我们继续下一步,来获取网页中的标题和超链接。 观察一下,第一篇文章是这样的: 这篇文章的标题和超链接信息在我们返回的文本中是这样的: 上面的表示是超链接的内容,而下面的则是表示是标题大小为4号字体 ,注意它们的标签。 这个网站比较简单,它的文章标题直接用"<h4>“括起来了,所以直接用”<h4>"就可以搜索到所有标题;但链接就不行,因为<a>出现的地方比较多,不是所有的链接都是我们需要的,所以要另外处理。 从返回的文本中提取内容可以使用正则表达式,需要引入r 阅读详情

相关推荐

Python之requests爬虫

第一关:requests 基础 代码: import requests def get_html(url): ''' 两个参数 :param url:统一资源定位符,请求网址 :param headers:请求头 :return:html ''' # ***************** Begin ******************** # # 补充请求头 header={"User-Agent": "Mozilla/

qq_44111805的博客 3433

Java网络编程笔记(二):获取网络资源(URL)

URL(uniform resource locator)是统一资源定位符的简称,一般表现为字符串形式,表示Internet上的某一资源的地址,是Internet中对网络资源进行统一定位和管理的标识,利用URL就可以获取网络上的资源。本实例介绍用三种方式从URL中提取资源信息。 三种从URL中提取资源信息的方式: 通过创建远程对象读取URL指定网页内容; 通过创建读对象读取URL指定网页内容

上官云霆的博客 1216

如何在STM32上5分钟搞定nanopb协议传输?附完整代码示例

本文提供了在STM32微控制器上快速集成nanopb协议传输的实战指南。通过详细的步骤,从.proto文件定义、代码生成到STM32CubeIDE项目移植,帮助开发者利用nanopb这一轻量级Protocol Buffers C语言实现,在5分钟内构建高效、跨平台的嵌入式设备通信框架,并附有完整的代码示例。

jwt8token的博客 838

关于urllib2.urlopen()的理解

第一次使用Markdown编辑器作为 python 的入门人员,对最近学习的网页下载器有很多小疑问,在这里记录一下,都是我自己查资料逛网站的理解,欢迎指正! 首先说一下: urllib2 是什么?urllib2 是 python 官方提供的一个获取url(Uniform Resource Locators,统一资源定址器)基础模块。 urlopen()是什么?urlopen是一个函数形式的接口,用来

Jamie Jiang's Blog 5424

OpenLayers源码解析1 Map.js

Map.js 父类:./PluggableMap/PluggableMap 引用:5个模块 ./renderer/Composite.js ./PluggableMap.js ./obj.js ./control.js(控件) ./interaction.js(交互) 主要功能:核心组件,渲染地图 必要参数: view layers target controls和interactions要是未指定,使用默认值 方法:createRenderer()? /** * @module ol/Map */ i

qq_45005996的博客 1898

海康威视4G摄像头直连实战:不用萤石云,手把手教你用ISUP SDK搞定跨网段视频流

本文详细介绍了如何通过海康威视ISUP SDK实现4G摄像头的直连通信,提供了一套零平台费、自主可控的技术方案。文章涵盖技术选型、设备端配置、服务器端开发及高级应用场景,特别适合中小型安防项目,帮助开发者解决跨网段视频流传输难题,降低长期运营成本。

weixin_27076351的博客 467

[Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容

所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。  类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源。 在Python中,我们使用urllib2这个组件来抓取网页。 urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。 它以urlopen函

汪海的实验室 31万+

手把手教你完成基于cnn的手写数字识别系统MATLAB语言

手写数字识别是经典的 CNN 分类应用之一,常用的数据集就是 MNIST 手写数字数据集,包含 0~9 这 10 个数字的手写图片,每个数字都由 6 万幅训练图像和 1 万幅测试图像构成。为了便于直观分析,这里选择 MATLAB 工具箱提供的 DigitDataset 进行训练识别,读者也可以直接利用 MNIST 数据集或者自己设计的数据集进行实验。其中,数据集文件夹 db 如图 所示。在数据集文件夹 db 里面对每个数字都建立了子文件夹,各自包含 1000 幅 28×28 大小的二维灰度图像。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1368

python用urllib抓取网页元素_[Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容...

所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源。在Python中,我们使用urllib2这个组件来抓取网页。urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。它以urlopen函数的形式提供了一个非常...

weixin_39902545的博客 196

YOLOv8+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程

双向特征金字塔网络(BiFPN)是一种强化多尺度特征融合支持“自顶向下+自底向上”的双向特征流动,同时保留不同尺度的细节信息;引入加权融合机制,自动学习不同特征的重要性权重;裁剪冗余节点,在轻量化的同时提升融合效率。

m0_64661770的博客 492

使用OpenGL加载和显示DXF格式的3D模型文件编程

这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。

2301_79331421的博客 411
上一篇: 网络爬虫(一):抓取网页的含义和URL基本构成
下一篇: 网络爬虫(三):异常的处理和HTTP状态码的分类
Wang_AI
博客等级 码龄12年 988粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值