1 何为爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。摘自百度百科

2 URL

2.1 URL含义

URL(Uniform/Universal Resource Locator的缩写,统一资源定位符)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地址的。现在它已经被万维网联盟编制为因特网标准RFC1738了。

2.2 URL格式

一个完整的URL包括访问协议类型、主机地址、路径和文件名。

访问协议类型:表示采用什么协议访问哪类资源,以便浏览器决定用什么方法获得资源

主机地址:表示要访问的主机的IP地址或域名地址(包括端口)

路径和文件名:表示信息在主机中的路径和文件名,如果缺省文件路径,则表示定位于Web服务器的主页,其文件名通常是index.htm。

3 浏览器网页过程

输入地址

浏览器查找域名的 IP 地址

这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...

浏览器向 web 服务器发送一个 HTTP 请求

服务器处理请求

服务器返回一个 HTTP 响应

浏览器显示 HTML

浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)

用户看到的实际就是HTML,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,来获取自己需要的资源,包括图片、文字等。

4 urllib—URL处理模块

4.1 如何使用urllib包来获取Internet资源

例:

>>> import urllib.request ①

>>> with urllib.request.urlopen('https://www.baidu.com') as f: ②

... print(f.read())

...

b'

① 导入模块

② 用with语句来打开URL,urlopen一般常用的有三个参数,它的参数如下:urllib.requeset.urlopen(url,data,timeout),用f.read()方法来一次性读取全部内容,可以加参数来确定读取的字节数,如f.read(300)

③ 可以看到urlopen返回的是字节对象,如果确定html编码格式,可以使用decode来解码,如:f.read().decode('utf-8')

4.2 urlretrieve()

如果您希望通过URL检索资源并将其存储在一个临时位置,您可以通过urlretrieve()函数来实现这一功能,

import urllib.request

local_filename, headers = urllib.request.urlretrieve('http://python.org/')

html = open(local_filename)

5 POST和GET数据传送

5.1 通过GET方式发送

如果要想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象add_header方法添加HTTP头,我们就可以把请求伪装成浏览器,上面的代码可以修改为下面这样:

import urllib.request

req = urllib.request.Request(url='https://www.baidu.com') ①

req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36') ②

with urllib.request.urlopen(req) as f:

print(f.status)

for k, v in f.getheaders(): ③

print(k, v)

① 通过Request对象添加headers方式请求

②.add_header()方法添加头信息

③ 打印头信息

5.2 通过POST方式发送请求

只需要把参数data以bytes形式传入,下面代码是模拟的数据,做个例子使用:

from urllib import request, parse ①

login_data = bytes(parse.urlencode({'form_email': 'demo', 'form_password': '123456'}), encoding='utf-8')

print(login_data) ②

req = request.Request('http://httpbin.org/post') ③

req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0')

response = request.urlopen(req, login_data)

print(response.read())

①导入request的parse模块

②这里就用到urllib.parse,通过bytes(urllib.parse.urlencode())可以将post数据进行转换放到urllib.request.urlopen的data参数中。这样就完成了一次post请求。如果我们添加data参数的时候就是以post请求方式请求,如果没有data参数就是get请求方式

③这个网址不错,可以作为练习urllib的各种方式(此处借鉴了scrounger的个人博客)

今天就到这里,明天继续urllib的高级用法。

python urllib.request 爬虫 数据处理-运维学python之爬虫基础篇(二)urllib模块使用...相关推荐

  1. 运维学python哪部分_初入运维的小伙伴,别再问需不需要学Python了

    这篇文章来自百度知道(你可以搜索"运维需不需要学Python"),或许有些观点不一定正确,但运维学Python这事毫无疑问是主流了,不信可以到各大招聘网站,看看但凡招聘运维有编程技 ...

  2. 运维学python用不上_不会Python开发的运维终将被淘汰?

    简介 Python 语言是一种面向对象.直译式计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明.Python 语法简捷而清晰,具有丰富和强大的类库,具有可扩展性和可嵌入 ...

  3. 运维学python perl go_公开课|一个小运维的《Golang 入门心路历程》

    成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成. 视频版 公开课主要内容:缘起 初识 熟悉 实践 爱上 缘起 本人之前是 hadoop hbase 运维,为了节约成本 hadoop cli ...

  4. 运维学python哪部分_运维新手们,别再问需不需要学PYTHON了

    经常有人在群里问,运维人员需不需要学开发?需不需要学PYTHON?PYTHON和SHELL有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲,求求新手们,以后别他妈瞎问了. 现阶段,掌握 ...

  5. 运维学python用不上_运维朋友们,别再问需不需要学 Python 了!

    运维人员需不需要学开发?需不需要学 Python?PythonN 和 Shell 有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲. 现阶段,掌握一门开发语言已经成为高级运维工程师的必 ...

  6. 运维学python用不上_数读 | 为什么运维朋友们都需要学Python?

    运维人员需不需要学开发?需不需要学Python?PythonN和Shell有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲. 现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能, ...

  7. 运维学python用不上_作为运维你还在想要不要学Python,看完这篇文章再说!

    原标题:作为运维你还在想要不要学Python,看完这篇文章再说! 本文由马哥教育Python自动化实战班5期学员推荐,转载自简书,作者为Li.Yingjie,内容略经小编改编和加工,观点跟作者无关,最 ...

  8. 运维学python用不上_运维工程师为什么要学python?

    现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能,不会开发,你就不能充分理解你们系统的业务流程,你就不能帮助调试.优化开发人开发的程序, 开发人员有的时候很少关注性能的问题,这些问题就得运维人 ...

  9. yield python3 知乎_运维学python之爬虫高级篇(七)scrapy爬取知乎关注用户存入mongodb...

    首先,祝大家开工大吉! 本篇将要介绍的是从一个用户开始,通过抓关注列表和粉丝列表,实现用户的详细信息抓取并将抓取到的结果存储到 MongoDB. 1 环境需求 基础环境沿用之前的环境,只是增加了Mon ...

最新文章

  1. linux-shell数据重定向详细分析
  2. awk之特征相同行的合并 ~转
  3. C++的sort排序法
  4. 【干货】Linux 网卡绑定的相关知识和技巧
  5. P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】
  6. 【设计模式 06】原型模式(克隆??)
  7. Vue入门 ---- 仿百度搜索
  8. 一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
  9. Enterprise Library Logging App Block的时区问题
  10. 排球积分程序(二)——需求分析
  11. 21个实用便利的PHP代码
  12. Linux下黑客帝国代码雨
  13. 安装 Office 2010 错误 error 1935和数据库以及安卓路线
  14. strongswan源代码结构与数据结构
  15. 计蒜客习题:猴子打字
  16. 顺丰和百度外卖绯闻内幕披露
  17. 最好的免费WordPress音频播放器插件
  18. Java调用Mysql
  19. Launcher的简单讲解一
  20. 使用gitbook制作电子书

热门文章

  1. centos7执行sh文件_一文看懂centos7如何管理自定义脚本服务
  2. java按行读取txt文件内容_对txt文件中的内容进行排序
  3. varchar保存带格式的数据_软件测试必备之数据库知识(一)
  4. vim 居中光标所在行(转载)
  5. 读书笔记《鸟哥的Linux私房菜-基础学习篇》man page 查询数据后数字的意思
  6. tflearn 数据集太大无法加载进内存问题?——使用image_preloader 或者是 hdf5 dataset to deal with that issue...
  7. git 回退版本并强制提交
  8. 【免费软件测试视频-0016】——LR系列之---协议的选择
  9. [WebApp开发]基础教程-Google官方文档-第四篇
  10. The Singleton of Design Pattern单态模式