文章目录

  • 1.互联网、HTTP
    • 互联网
    • HTTP
  • 2.开发者工具
  • 3.request库
    • request.get
    • request.post
    • request.get进阶:爬取豆瓣电影

1.互联网、HTTP

互联网

互联网也叫因特网(Internet),是指网络与网络所串联成的庞大网络,这些网络以一组标准的网络协议族相连,连接全世界几十亿个设备,形成逻辑上的单一巨大国际网络。它由从地方到全球范围内几百万个私人的、学术界的、企业的和政府的网络所构成。通过电子、无线和光纤等一系列广泛的技术来实现。这种将计算机网络互相连接在一起的方法可称作“网络互联”,在此基础上发展出来的覆盖全世界的全球性互联网络称为“互联网”,即相互连接在一起的网络。

提示: 互联网并不等于万维网(WWW),万维网只是一个超文本相互链接而成的全球性系统,而且是互联网所能提供的服务之一。互联网包含广泛的信息资源和服务,例如相互关联的超文本文件,还有万维网的应用,支持电子邮件的基础设施、点对点网络、文件共享,以及IP电话服务。

HTTP

HTTP是一个客户端(用户)和服务器端(网站)之间进行请求和应答的标准。通过使用网页浏览器、网络爬虫或者其他工具,客户端可以向服务器上的指定端口(默认端口为80)发起一个HTTP请求。这个客户端成为客户代理(user agent)。应答服务器上存储着一些资源码,比如HTML文件和图像。这个应答服务器成为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。尽管TCP/IP是互联网最流行的协议,但HTTP中并没有规定必须使用它或它支持的层。

事实上。HTTP可以在互联网协议或其他网络上实现。HTTP假定其下层协议能够提供可靠的传输,因此,任何能够提供这种保证的协议都可以使用。使用TCP/IP协议族时RCP作为传输层。通常由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP链接。HTTP服务器则在该端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态(比如“THTTP/1.1 200 OK”),以及请求的文件、错误信息等响应内容。

HTTP的请求方法有很多种,主要包括以下几个:

1.GET:向指定的资源发出“显示”请求。GET方法应该只用于读取数据,而不应当被用于“副作用”的操作中(例如在Web Application中)。其中一个原因是GET可能会被网络蜘蛛等随意访问。

2.HEAD:与GET方法一样,都是向服务器发出直顶资源的请求,只不过服务器将不会出传回资源的内容部分。它的好处在于,使用这个方法可以在不必传输内容的情况下,将获取到其中“关于该资源的信息”(元信息或元数据)。

3.POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

4.PUT:向指定资源位置上传输最新内容。

5.DELETE:请求服务器删除Request-URL所标识的资源,或二者皆有。

6.TRACE:回显服务器收到的请求,主要用于测试或诊断。

7.OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用“*”来代表资源名称向Web服务器发送OPTIONS请求,可以测试服务器共能是否正常。

8.CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的连接(经由非加密的HTTP代理服务器)。方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

2.开发者工具

如果想要编写一个爬取网页内容的爬虫程序,在动手编写前,最重要的准备工作可能就是检查目标网页,使用开发者工具。

Chrome的开发者模式为用户提供了下面几组工具。

1.Elements:允许用户从浏览器的角度来观察网页,用户可以借此看到Chrome渲染页面所需要的HTML、CSS和DOM(Document Object Model)对象。在“Element”面板中,开发者可以检查和编辑页面的HTML与CSS。

2.Network:可以看到网页向服务气请求了哪些资源、资源的大小以及加载资源的相关信息。此外,还可以查看HTTP的请求头、返回内容等。使用“Network”工具可以清楚地查看网页加载网络资源地过程和相关信息。“Network”中的“Preview”也是比较常用,可以用来预览数据。

3.Source:即源代码面板,主要用来调试JavaScript。

4.Console:即控制台面板,可以显示各种警告与错误信息。在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为shell在页面上与JavaScript交互。

5.Performance:使用这个模块可以记录和查看网站生命周期内发生的各种事情来提高页面运行时的性能。

6.Memory:这个面板可以提供比Performance更多的信息,比如跟踪内存泄漏。

7.Application:检查加载的所有资源。

8.Security:即安全面板,可以用来处理证书问题等。

3.request库

request.get

一个网络爬虫程序最普遍的过程:
1.访问站点;
2.定位所需的信息;
3.得到并处理信息。

import requests
url = 'https://www.python.org/dev/peps/pep-0020/'
res = requests.get(url)
text = res.text
text

可以看到返回的其实就是开发者工具下Elements的内容,只不过是字符串类型,接下来我们要用python的内置函数find来定位“python之禅”的索引,然后从这段字符串中取出它。通过观察网站,我们可以发现这段话在一个特殊的容器中,通过审查元素,使用快捷键Ctrl+shift+c快速定位到这段话也可以发现这段话包围在pre标签中,因此我们可以由这个特定用find函数找出具体内容

with open('zon_of_python.txt', 'w') as f:f.write(text[text.find('<pre')+28:text.find('</pre>')-1])
print(text[text.find('<pre')+28:text.find('</pre>')-1])

利用python自带的urllib完成以上操作:

import urllib
url = 'https://www.python.org/dev/peps/pep-0020/'
res = urllib.request.urlopen(url).read().decode('utf-8')
print(res[res.find('<pre')+28:res.find('</pre>')-1])

request.post

以金山词霸为例,有道翻译百度翻译谷歌翻译都有加密,以后可以自己尝试。

首先进入金山词霸首页http://www.iciba.com/

然后打开开发者工具下的“Network”,翻译一段话,比如刚刚我们爬到的第一句话“Beautiful is better than ugly.”

点击翻译后可以发现Name下多了一项请求方法是POST的数据,点击Preview可以发现数据中有我们想要的翻译结果

import requests
def translate(word):url="http://fy.iciba.com/ajax.php?a=fy"data={'f': 'auto','t': 'auto','w': word,}headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',}#User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。response = requests.post(url,data=data,headers=headers)     #发起请求json_data=response.json()   #获取json数据#print(json_data)return json_datadef run(word):    result = translate(word)['content']['out']   print(result)return resultdef main():with open('zon_of_python.txt') as f:zh = [run(word) for word in f]with open('zon_of_python_zh-CN.txt', 'w') as g:for i in zh:g.write(i + '\n')if __name__ == '__main__':main()**

request.get进阶:爬取豆瓣电影

代码为爬取豆瓣前250的电影

import requests
import osif not os.path.exists('image'):os.mkdir('image')def parse_html(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"}res = requests.get(url, headers=headers)text = res.textitem = []for i in range(25):text = text[text.find('alt')+3:]item.append(extract(text))return itemdef extract(text):text = text.split('"')name = text[1]image = text[3]return name, imagedef write_movies_file(item, stars):print(item)with open('douban_film.txt','a',encoding='utf-8') as f:f.write('排名:%d\t电影名:%s\n' % (stars, item[0]))r = requests.get(item[1])with open('image/' + str(item[0]) + '.jpg', 'wb') as f:f.write(r.content)def main():stars = 1for offset in range(0, 250, 25):url = 'https://movie.douban.com/top250?start=' + str(offset) +'&filter='for item in parse_html(url):write_movies_file(item, stars)stars += 1if __name__ == '__main__':main()

Python爬虫编程实践Task 01相关推荐

  1. Python爬虫编程实践 Task03

    文章目录 IP代理 获取代理IP地址的方法 代码实现 selenium session 和 cookie 动态网页和静态网页 静态网页 动态网页 session和cookies session coo ...

  2. Python爬虫编程实践 Task02

    文章目录 一.Xpath Xpath常用的路径表达式 使用lxml解析 实战:爬取丁香园-用户名和回复内容 二.正则表达式 re库 正则表达式的语法 正则表达式re库的使用 re库的主要功能函数 re ...

  3. Python爬虫编程实践--task01

    主要内容 HTTP基础 HTML基础 requests.get的使用 API的使用 HTTP HTTP是一个客户端(用户)和服务器端(网站)之间进行请求和应答的标准.通过使用网页浏览器.网络爬虫或者其 ...

  4. Datawhale第十二期组队学习--Python爬虫编程实践 Task03:session和cookie、代理、selenium自动化 拔高:丁香园留言板爬取

    一. session和cookie 常用的 web 容器有 Nginx . Apache . Tomcat .Weblogic . Jboss . Resin 等等 http 1.0 HTTP1.0的 ...

  5. Python爬虫编程实践--task02

    主要学习内容: Beautiful Soup库的入门 xpath的使用 re的使用 1. Beautiful Soup库入门 Beautiful Soup 是一个HTML/XML 的解析器,主要用于解 ...

  6. Python爬虫编程实践 Task04

    爬取腾讯新闻 了解ajax加载 通过chrome的开发者工具,监控网络请求,并分析 用selenium完成爬虫 具体流程如下: 用selenium爬取https://news.qq.com/ 的热点精 ...

  7. Python爬虫编程思想(1):HTTP基础

    目录 1. URI和URL 2. 超文本 3. HTTP与HTTPS 4. HTTP的请求过程 Python爬虫编程思想(2):客户端请求与服务端响应 由于网络爬虫要处理的主要目标是网页,所以在编写爬 ...

  8. Python爬虫编程常见问题解决方法

    Python爬虫编程常见问题解决方法 参考文章: (1)Python爬虫编程常见问题解决方法 (2)https://www.cnblogs.com/xpwi/p/9604015.html (3)htt ...

  9. Python爬虫编程思想(6):实战案例:抓取所有的网络资源

    Python爬虫编程思想(7):实战案例:抓取博客文章列表 到现在为止,我们已经对网络爬虫涉及到的基本知识有了一个初步的了解.本文会编写一个简单的爬虫应用,以便让读者对爬虫有一个基本的认识.本节要编写 ...

最新文章

  1. c语言装饰,C++设计模式之装饰模式(Decorator)
  2. ASP绕过防注入的新思路
  3. Eclipse无法打开“Failed to load the JNI shared library”
  4. 在公网(internet)上建立website时不能用http访问
  5. 使用SSH密钥对给你的阿里云ECS加把安全锁
  6. Caused by: java.io.IOException: Unable to initialize any output collector
  7. 牛客练习赛 71 AC
  8. android的md动画,Android-notes/动画体系详解.md at master · drs0214/Android-notes · GitHub
  9. Tensorflow官方文档学习理解 (三)-MNIST
  10. Kylin 与 Spark SQL相比,有哪些差异和优势?
  11. 关于epub格式电子书和PC上的ePub阅读器...
  12. NOIp2010 机器翻译
  13. 纽约科技行业十大高薪职位
  14. 联想笔记本G50-70无线网卡问题
  15. Android studio课程设计开发实现---日记APP
  16. 利用PYTHON连接阿里云物联网平台
  17. ClickHouse介绍安装和工作原理(1)
  18. text pad java_错误:无法在Textpad 8中找到或加载主类
  19. GitHub学生包申请
  20. 电脑网页游戏打不开?

热门文章

  1. 从0到1打造一款react-native App(二)Navigation+Redux
  2. Windows 下安装 tensorflow keras opencv 的避坑指南!
  3. python 学习资料
  4. Slardar Sql Mapper Framework for Java( Java 持久层框架一枚~)
  5. JS隐形数据类型转换注意事项
  6. 安装oracle11g未找到文件WFMLRSVCApp.ear文件
  7. jQuery实现的简单文字提示效果模拟title
  8. 定时器 setTimeout setInterval
  9. PaddlePaddle飞桨OCR文本检测——入门安装GPU版(一)
  10. 接口测试用例——测试用例评审