上一篇讲了网页抓取的基础,分析html,但是我们所得到的html内容必须是通过编程的方式获取到的。
简单地讲,HTTP web 服务是指以编程的方式直接使用 HTTP 操作从远程服务器发送和接收数据。P
ython3 带有两个库用于和HTTP web 服务交互:
http.client 是实现了RFC 2616, HTTP 协议的底层库。
urllib.request 建立在http.client之上一个抽象层。 它为访问HTTP 和 FTP 服务器提供了一个标准的API,可以自动跟随HTTP 重定向, 并且处理了一些常见形式的HTTP 认证。
1. 一个简单的http 服务请求
import urllib.request as request if __name__ == '__main__': response = request.urlopen("http://www.baidu.com") data = response.read() print(type(data)) # <class 'bytes'> print(data) #输出字节码内容 print(str(data,encoding = "utf-8")) #将字节码转换成utf-8编码的字符串
(1)在Python中操作http web请求非常简单;urllib.request模块有一个方便的函数urlopen() ,它接受你所要获取的页面地址,然后返回一个类文件对象,您只要调用它的read()方法就可以获得网页的全部内容
(2)urlopen().read()方法总是返回bytes对象,而不是字符串。记住字节仅仅是字节,字符只是一种抽象。 HTTP 服务器不关心抽象的东西。如果你请求一个资源,你得到字节。 如果你需要一个字符串,你需要确定字符编码,并显式的将其转化成字符串。
2. 使用post请求发送数据
import urllib.request as request from urllib.parse import urlencode if __name__ == '__main__': param = {'email':'abc@163.com','password':'test','origURL':'http://www.renren.com/Home.do','domain':'renren.com'} param = urlencode(param).encode('utf-8') #url编码后再进行utf-8转换成bytes print(type(param)) # <class 'bytes'> print(param) #b'origURL=http%3A%2F%2Fwww.renren.com%2FHome.do&domain=renren.com&password=test&email=abc%40163.com' response = request.urlopen("http://www.renren.com/ajaxLogin/login",param) print(str(response.read(),'utf-8')) #会看到结果里有提示用户名密码不匹配(1)post请求发送的数据不能跟在url后面,所以我们可以将字典类型的数据通过urlencode转化成字符串的数据格式,再通过encode转化成字节码的形式。
(2)urlopen第二个参数即为post提交的bytes类型的数据。
(3)模拟了一个人人的登陆,在返回结果里面可以收到服务器的返回“您的用户名和密码不匹配” ,说明我们的数据已经通过post提交到了服务器(就算此处用正确的用户名密码也登陆不进去,因为人人网的密码是加密传递的,需要加密后的密码才能登陆成功)
3. httplib2介绍
httplib2一个第三方的开源库,它比http.client更完整的实现了HTTP协议,同时比urllib.request提供了更好的抽象。可以下载python3对应的版本(目前最新版本的名称:httplib2‐python3‐0.5.0.zip),可以通过https://httplib2.googlecode.com/files/httplib2-python3-0.5.0.zip 进行下载(有可能被墙,你懂的),下载后解压进行安装,我的解压目录为:E:\daokun\python\diveintopython3-cn\httplib2-python3-0.5.0,在CMD窗口里面cd到解压目录,又因我的python安装在D:\Python32\目录下,所以我的安装命令为:D:\Python32\python.exe setup.py install ,安装后即可使用httplib2。
一个httplib2示例
import httplib2 if __name__ == '__main__': httplib2.debuglevel = 1 h = httplib2.Http(".cache") response,content = h.request("http://www.12306.cn/mormhweb/zxdt/tlxw_tdbtz53.html") print(len(content)) print(response.status) print(response.fromcache) print(response)
(1)httplib2.debuglevel = 1 可以获取一些隐藏信息,链接、发生的数据、响应及header头信息等。
(2)httplib2的主要接口是Http对象。你创建Http对象时总是应该传入一个目录名,具体原因是在此目录下创建缓存。目录不需要事先存在,httplib2会在必要的时候创建它。
(3)一旦你有了Http对象, 获取数据非常简单,以你要的数据的地址作为参数调用request()方法就可以了。这会对该URL执行一个HTTP GET请求.
(4)request() 方法返回两个值。第一个是一个httplib2.Response对象,其中包含了服务器返回的所有HTTP头。比如, status为200 表示请求成功。
(5)content 变量包含了HTTP服务器返回的实际数据。数据以bytes对象返回,不是字符串。 如果你需要一个字符串,你需要确定字符编码并自己进行转换。
httplib2的post请求
import httplib2 from urllib.parse import urlencode if __name__ == '__main__': httplib2.debuglevel = 1 h = httplib2.Http(".cache") param = {'email':'abc@163.com','password':'test','origURL':'http://www.renren.com/Home.do','domain':'renren.com'} response3,content3 = h.request("http://www.renren.com/ajaxLogin/login","POST",urlencode(param)) print(str(content3,'utf-8'))
(1)h.request第一个参数是url。
(2)第二个参数是请求的类型,这里是POST。
(3)第三个参数是经过url编码后要发送到服务器的数据。
(4)同样我们在返回的结果里面看到服务器的返回有提示说:用户名或密码错误。
Http Web服务还有很多其他的东西,比如缓存、压缩等等,留给感兴趣的人自己去学习。
相关推荐
在Jupyter环境利用Python核实现网页信息的抓取。
Python的网页数据抓取,表格的制作,CSS文件的生成,字体的改变
掌握与网页抓取和数据提取相关的 Python 编程基础知识 获得对网络爬虫进行编码、以所需格式存储数据以及专业地使用数据的技能 网络抓取是从网络中提取数据的强大工具,但对于没有技术背景的人来说,它可能会令人...
Web Scraping With Python: Data Extraction from the Modern Web, 3rd Edition 果编程是魔法,那么网络抓取无疑是一种魔法。通过编写简单的自动化程序,您可以查询 Web 服务器、请求数据并解析数据以提取所需的信息...
ruia:基于asyncio的异步Python 3.6 网页抓取微框架。它具有容易上手、非阻塞、扩展性强等特点
淘宝美食抓取 存储到Mongodb和txt文件中 服务器端:通过web服务器的配置来指定编码参数,为所有text/html类型的文档指定带有正确编码信息的Content-Type头信息。例如Content-Type: text/html;charset=UTF-8 ...
web of science论文爬虫程序(python),可以抓取web of science论文数据,也可以抓其它论文数据库的数据
基于python scrapy框架抓取豆瓣影视资料
从ICLR 2019 OpenReview网页抓取数据
2015年的新书,描述了python在网页抓取和分析方面的最新知识
Python网络数据抓取代码主要涉及Python爬虫技术,可以用于自动化采集网络上的数据,如网页内容、图片、视频、音频等。这些数据可以用于数据分析、机器学习、自然语言处理等多个领域。 适用人群: Python网络数据...
mongodb的应用之用python爬取网页内容并用mongodb保存. 由于mongodb是文档型数据库,区别于传统的数据库,它是用来管理文档的。在传统的数据库中,信息被分割成离散的数据段,而在文档数据库中,文档是处理信息的...
本文实例讲述了Python实现从Web的一个URL中抓取文档的方法,分享给大家供大家参考。具体方法分析如下: 实例代码如下: import urllib doc = urllib.urlopen(http://www.python.org).read() print doc#直接打印出...
以前写的Python抓取股票资料的项目,因为效率太低后来没有用了,用python跑完一圈大概要几十分钟,没法使用,但是当python的demo还是不错的,这个demo用到的技能包括数据库操作,定时任务,用BeautifulSoup爬虫,...
包含爬虫后台和前端,监控各个爬虫状态 ...python_spiders_web -- 爬虫前台项目 运行环境 python 3.8.3 + nginx + mysql 项目技术(必填) Python 3.8.3 + flask + vue 2.6.11 + element-ui 2.13.1 + echarts + jquery
从web上获取文字信息,作为自然语言处理部分的基本数据获取方式
使用python抓取微信公众号中的文章
网页抓取工具通过Python和Selenium的Web抓取工具。 Python版本:3.8.7 Selenium版本:3.141.0 使用以下工具进行了测试: 描述该网络抓取工具用于测试抓取功能。 目的是刮掉在测试URL中找到的所有产品。模组main.py ...