Python3爬虫(一)抓取网页的html

2023-05-16

因为代码只有几行,所以可以先贴代码:

import  urllib.request
url = r'http://douban.com'
res = urllib.request.urlopen(url)
html = res.read().decode('utf-8')
print(html)

第一行,导入 urllib库的request模块

第二行,指定要抓取的网页url,必须以http开头的

第三行,调用 urlopen()从服务器获取网页响应(respone),其返回的响应是一个实例

第四行,调用返回响应示例中的read()函数,即可以读取html,但需要进行解码,具体解码写什么,要在你要爬取的网址右键,查看源代码,


红框中的 charset= 则表示编码格式,我要爬取的网页编码为 utf-8,所以,解码我也填utf-8,如果是gbk2313,则填写的是GBK


(更为简单的方法是在程序中调用info()获取网页头部来查看编码方式:)

查看网页的头部信息以确定网页的编码方式:

import urllib.request

res = urllib.request.urlopen('http://www.163.com')
print(res.info())  #info()方法 用来获取网页头部
执行结果:


可以看出次网页的编码是 GBK。


第五行,打印就行。

但上面的写法是裸奔型写法,就是没有头部的,有一些网页你没有头部是不能访问的,会返回 403错误。



最正式的做法是仿照http的过程,在用爬虫获取网页的时候,加入头部,伪装成浏览器。

Http 其实就是 请求/响应模式,永远都是 客户端向服务端发送请求,然后服务端再返回响应。


有一个问题就是 头部改怎么加?可以打开你的浏览器,按F12,(我用的是谷歌浏览器)

F12打开开发者工具模式后,进入一个随便一个网页,开发者工具就会有东西出现


双击name栏的任意一个,在Headers 一栏会有个 User-Agent ,复制蓝色部分,蓝色部分就是头部。再把蓝色部分加入到爬虫程序中,见下面代码:

这种方式是推荐的

import urllib.request

url = r'http://douban.com'
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
req = urllib.request.Request(url=url,headers=headers)
res = urllib.request.urlopen(req)
html = res.read().decode('utf-8')
print(html)

注意:urllib.request.Request()用于向服务端发送请求,就如 http 协议客户端想服务端发送请求

而 urllib.request.urlopen()则相当于服务器返回的响应

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3爬虫(一)抓取网页的html 的相关文章

  • 我应该使用 HTML 中的什么标签,没有特殊含义,仅用于携带元数据?

    是否有任何无意义的 HTML 标签来携带额外的元数据 例如指定块 区域的 JavaScript 属性 喜欢 div class item div
  • 为什么 textarea 不是 input[type="textarea"]?

    为什么有一个元素
  • 使用 CSS 格式化日期/时间或百分比值?

    有没有办法使用 CSS 来使用特定格式格式化日期 例如YYYY MM DD 或 MM DD YYYY 有或没有时间 也可以将数字格式化为保留 2 位小数的百分比值 例如5 4321987 显示为 5 43 我可能可以使用 JavaScrip
  • 突出显示 Html 文档中不同标签的文本

    我是新来的角js 现在我正在突出显示 HTML 文档中的文本 So 我的代码是这样的 var InstantSearch highlight function container highlightText var internalHigh
  • contenteditable,在文本末尾设置插入符号(跨浏览器)

    输出在Chrome div style border 1px solid 000 width 500px height 40px hey div what s up div div div div
  • 如何将水平 ul 列表中的项目与图像垂直对齐?

    我有以下 html 代码 div ul li a href index php site login About a li li a href index php site login FAQ a li li a href http twi
  • Video.js - 阻止点击播放功能

    我正在使用 video js 将视频嵌入到 HTML 页面中 它将用作仅适用于 ipad 的 Web 应用程序 因此我相信它使用的是本机 HTML5 播放器 我正在尝试禁用点击播放功能 以便用户必须使用控件 但我在这样做时遇到了麻烦 我尝试
  • 关闭 Godot 中的游戏

    我正在使用 Godot 创建网页游戏 为了关闭游戏 我尝试使用 get tree quit 如果我在 IDE 上使用它 它就可以工作 当我在我的服务器上尝试它时 导出项目后 它不起作用 我确信导出设置没问题 我怎样才能关闭游戏 并且 如何添
  • 在 JavaScript 中引用 C# 变量

    我已经阅读了很多线程 但我不明白为什么这不起作用 我正在创建一个将用作导航栏的 SharePoint Web 部件 一切都很顺利 直到我尝试在 JS 代码中引用 C 变量 这是来自 VisualWebPart1UserControl asc
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • Iphone safari 无法在键盘打开时调整视口大小

    当键盘弹出时 Mobile safari 不会更新 window innerHeight 至少在9 3 5中 并且有几个答案 例如this https stackoverflow com a 17604856 2423187一 有评论说在
  • HTML5 范围输入中的样式下限和上限填充

    正如所解释的here http www hongkiat com blog html5 range slider style IE 允许在 CSS 中设置下部和上部填充或轨道区域的样式 如下所示 The following only aff
  • 2013 年 HTML 电子邮件:如何控制段落和图像等元素之间的间距?

    我目前正在重新设计一些 HTML 电子邮件模板 这是我几年来没有做过如此深入的事情 我已经在 HTML 文件中制作了模板 我正在浏览器中本地测试该模板 一切看起来都很好 我使用表格进行布局 我使用的唯一其他标签是 p a and img C
  • 如何在多行 Flexbox 布局中指定换行符?

    有没有办法在多行弹性框中进行换行 例如 在每个第三项之后中断这个代码笔 https codepen io asvirskyi pen bdbLNz container background tomato display flex flex
  • HTML:您可以隐藏/忽略浏览器查找中的文本元素 (CTRL+F)

    我有一个具有相当复杂的 UI 的 Web 应用程序 并且屏幕的一部分保留用于内容 如果可能的话 我想这样做 以便当用户使用浏览器的内置文本搜索 CTRL F 时 UI 中的任何文本都将被忽略 并且仅搜索实际内容 这可行吗 CSS 和 Jav
  • 无法读取未定义错误的属性“匹配”

    我试图在 React JS 前端显示一些文本来代替个人资料图像 当它不可用时 基本上 我将当前客户名称传递给一个函数 该函数提取名称中所有单词的第一个字符 我能够仅显示名称 但是当我执行函数调用时 出现 无法读取未定义的属性 匹配 错误 并
  • html 文件上传的默认文件夹和文件名

    我正在使用 jQuery Ajax 插件将图像文件从本地计算机上传到网络服务器 该网页呈现一个标记为Upload Image File 用户按下按钮并从浏览器显示的弹出目录列表中选择要上传的文件 服务器上的 PHP 存储图像文件 一切正常
  • HTML 中按钮内的图标

    我需要在 HTML 中将小图标放在按钮内 例如 我需要在我的网站上有 facebook 按钮 在按钮内首先是 F 图标 然后是 facebook 怎么做
  • 将文本数据作为表单中的文件发布

    是否可以从 html 表单中发布一些作为文件输入类型的字符串的 XML 数据 情况是我有一个像这样的表格 form action target php method post enctype multipart form data gt
  • 防止文本环绕浮动图像

    我目前有一个向左浮动的图像 以及位于其右侧的一段文本 该文本块当前不是浮动的 它只是位于 HTML 中的图像之后 因此 当它变得更长时 它最终会踢到图像下方的左侧以继续 如何才能使文本块始终保持在图像的右侧 以便图像和文本的行为就像两个并排

随机推荐