网络爬虫

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

(参考百度百科,详细请见https://baike.baidu.com/item/网络爬虫/5162711?fr=aladdin&fromid=22046949&fromtitle=%E7%88%AC%E8%99%AB)

代码和步骤说明:借鉴http://cuijiahua.com。 https://blog.csdn.net/c406495762/article/details/58716886

Urllib

urllib是一个URL处理包,这个包中集合了一些处理URL的模块,如下:

  1. 打开和读取URL:urllib.request
  2. 包含request产生的错误,可以使用try进行捕捉处理:urllib.error
  3. 包含解析URLs的方法:urllib.parse
  4. urllib.robotparser模块用来解析robots.txt文本文件.它提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面

urllib_test01.py

 from urllib import request

 if __name__=="__main__":
response=request.urlopen("http://i.cnblogs.com")
html=response.read()
print(html)

运行结果:

>>>
 RESTART: C:\Users\DELL\AppData\Local\Programs\Python\Python36\urllib_test01.py
b'\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset="utf-8" />\r\n    <meta name="viewport" content="width=device-width" />\r\n    <title>\xe7\x94\xa8\xe6\x88\xb7\xe7\x99\xbb\xe5\xbd\x95 - \xe5\x8d\x9a\xe5\xae\xa2\xe5\x9b\xad</title>\r\n    <link rel="stylesheet" href="/scripts/bootstrap/css/bootstrap.min.css" />\r\n    <link href="/scripts/ladda/ladda-themeless.min.css" rel="stylesheet" />\r\n    <link href="/css/signin_bundle.css?v=L6jW_dned1XSxz8ohN2oMp1Q1fPUq1W5sWqqw6HNaH01" type="text/css" rel="stylesheet" />   \r\n    <script src="/scripts/jquery.min.js"></script>\r\n    <script src="/scripts/bootstrap/js/bootstrap.min.js"></script>\r\n    <script src="/scripts/ladda/spin.min.js"></script>\r\n    <script src="/scripts/ladda/ladda.min.js"></script>\r\n    <script src="/scripts/jsencrypt.min.js"></script>\r\n    <script>\r\n        var return_url = \'http://i.cnblogs.com/\';\r\n        var ajax_url = \'/user\' + \'/signin\';\r\n        var enable_captcha = false;\r\n        var is_in_progress = false;\r\n    </script>\r\n    <script src="/scripts/signin_bundle.js?v=1spnpY8gb0K9MfNetxJoLoPjd7dN7PIKB8kMqcak-RQ1"></script>\r\n\r\n</head>\r\n<body onload="setFocus()">\r\n    <div style="width: 100%;">\r\n        <div align="center">\r\n            <div id="Main">\r\n                <noscript>\r\n                    <div style="font-size:15px;margin-bottom:20px;">\r\n                        \xe6\x82\xa8\xe7\x9a\x84\xe6\xb5\x8f\xe8\xa7\x88\xe5\x99\xa8\xe6\x9c\xaa\xe5\x90\xaf\xe7\x94\xa8Javascript\xef\xbc\x8c\xe6\x97\xa0\xe6\xb3\x95\xe8\xbf\x9b\xe8\xa1\x8c\xe7\x99\xbb\xe5\xbd\x95\xe3\x80\x82\r\n                    </div>\r\n                    <style>\r\n                        form {\r\n                            display: none;\r\n                        }\r\n                    </style>\r\n                </noscript>\r\n                <form method="post" onsubmit="return false;">\r\n                    <div id="Heading">\xe7\x99\xbb\xe5\xbd\x95\xe5\x8d\x9a\xe5\xae\xa2\xe5\x9b\xad - \xe4\xbb\xa3\xe7\xa0\x81\xe6\x94\xb9\xe5\x8f\x98\xe4\xb8\x96\xe7\x95\x8c</div>\r\n                    <div class="block">\r\n                        <label class="label-line">\xe7\x99\xbb\xe5\xbd\x95\xe7\x94\xa8\xe6\x88\xb7\xe5\x90\x8d(<a href="/GetUsername.aspx" tabindex="-1" class="tb_right">\xe6\x89\xbe\xe5\x9b\x9e</a>)</label>\r\n                        <input type="text" id="input1" value="" class="input-text" onkeydown="check_enter(event)" /> <span id="tip_input1" class="tip"></span>\r\n                    </div>\r\n                    <div class="block">\r\n                        <label class="label-line">\xe5\xaf\x86\xe7\xa0\x81(<a href="/GetMyPassword.aspx" tabindex="-1" class="tb_right">\xe9\x87\x8d\xe7\xbd\xae</a>)</label>\r\n                        <input type="password" id="input2" value="" class="input-text"  onkeydown="check_enter(event)" /> <span id="tip_input2" class="tip"></span>\r\n                    </div>\r\n\r\n                    <div class="modal fade" id="checkWay" tabindex="-1" role="dialog" aria-hidden="true">\r\n                        <div class="modal-dialog">\r\n                            <div class="modal-content center-block">\r\n                                <div class="modal-header">\r\n                                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>\r\n                                    <h4 class="modal-title">\r\n                                        \xe8\xaf\xb7\xe5\xae\x8c\xe6\x88\x90\xe4\xba\xba\xe6\x9c\xba\xe8\xaf\x86\xe5\x88\xab\xe9\xaa\x8c\xe8\xaf\x81\r\n                                    </h4>\r\n                                </div>\r\n                                <div class="modal-body">\r\n                                    <div id="showLoading" class="ladda-button" data-style="zoom-in"></div>\r\n                                    <div id="captchaBox" class="center-block">\r\n                                        <span id="geetestLoading"> \xe9\xaa\x8c\xe8\xaf\x81\xe7\xa0\x81\xe7\xbb\x84\xe4\xbb\xb6\xe5\x8a\xa0\xe8\xbd\xbd\xe4\xb8\xad,\xe8\xaf\xb7\xe7\xa8\x8d\xe5\x90\x8e...</span>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div class="block">\r\n                        <input id="remember_me" type="checkbox" name="remember_me" onkeydown="check_enter(event)" /><label for="remember_me" onkeydown="check_enter(event)">\xe4\xb8\x8b\xe6\xac\xa1\xe8\x87\xaa\xe5\x8a\xa8\xe7\x99\xbb\xe5\xbd\x95</label>\r\n                    </div>\r\n                    <div class="block">\r\n                        <input type="submit" id="signin" class="button" value="\xe5\x8a\xa0\xe8\xbd\xbd\xe4\xb8\xad..." /> <span id="tip_btn" class="tip"></span>\r\n                    </div>\r\n                    <div class="block nav">\r\n                        &raquo; <a href="/register.aspx?ReturnUrl=http://i.cnblogs.com/" title="\xe6\xb3\xa8\xe5\x86\x8c\xe6\x88\x90\xe4\xb8\xba\xe5\x8d\x9a\xe5\xae\xa2\xe5\x9b\xad\xe7\x94\xa8\xe6\x88\xb7">\xe7\xab\x8b\xe5\x8d\xb3\xe6\xb3\xa8\xe5\x86\x8c</a><br />\r\n                        &raquo; <a href="http://www.cnblogs.com/ContactUs.aspx">\xe5\x8f\x8d\xe9\xa6\x88\xe9\x97\xae\xe9\xa2\x98</a>\r\n                    </div>\r\n                </form>\r\n                <div style="clear: both" />\r\n            </div>\r\n        </div>\r\n    </div>\r\n</body>\r\n</html>\r\n'
>>>

我们爬取完网站后,得到的是一堆二进制码。按照正常的流程,浏览器从服务器端得到信息后会进行解析,然后展示给我们看。而我们现在可以通过简单的decode()命令将网页的信息进行解码,并显示出来,更新代码为:

from urllib import request

if __name__=="__main__":
response=request.urlopen("http://i.cnblogs.com")
html=response.read()
html = html.decode("utf-8")
print(html)

展示为:

Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
 RESTART: C:\Users\DELL\AppData\Local\Programs\Python\Python36\urllib_test01.py

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width" />

<title>用户登录 - 博客园</title>

<link rel="stylesheet" href="/scripts/bootstrap/css/bootstrap.min.css" />

<link href="/scripts/ladda/ladda-themeless.min.css" rel="stylesheet" />

<link href="/css/signin_bundle.css?v=L6jW_dned1XSxz8ohN2oMp1Q1fPUq1W5sWqqw6HNaH01" type="text/css" rel="stylesheet" />

<script src="/scripts/jquery.min.js"></script>

<script src="/scripts/bootstrap/js/bootstrap.min.js"></script>

<script src="/scripts/ladda/spin.min.js"></script>

<script src="/scripts/ladda/ladda.min.js"></script>

<script src="/scripts/jsencrypt.min.js"></script>

<script>

var return_url = 'http://i.cnblogs.com/';

var ajax_url = '/user' + '/signin';

var enable_captcha = false;

var is_in_progress = false;

</script>

<script src="/scripts/signin_bundle.js?v=1spnpY8gb0K9MfNetxJoLoPjd7dN7PIKB8kMqcak-RQ1"></script>

</head>

<body onload="setFocus()">

<div style="width: 100%;">

<div align="center">

<div id="Main">

<noscript>

<div style="font-size:15px;margin-bottom:20px;">

您的浏览器未启用Javascript,无法进行登录。

</div>

<style>

form {

display: none;

}

</style>

</noscript>

<form method="post" onsubmit="return false;">

<div id="Heading">登录博客园 - 代码改变世界</div>

<div class="block">

<label class="label-line">登录用户名(<a href="/GetUsername.aspx" tabindex="-1" class="tb_right">找回</a>)</label>

<input type="text" id="input1" value="" class="input-text" onkeydown="check_enter(event)" /> <span id="tip_input1" class="tip"></span>

</div>

<div class="block">

<label class="label-line">密码(<a href="/GetMyPassword.aspx" tabindex="-1" class="tb_right">重置</a>)</label>

<input type="password" id="input2" value="" class="input-text"  onkeydown="check_enter(event)" /> <span id="tip_input2" class="tip"></span>

</div>

<div class="modal fade" id="checkWay" tabindex="-1" role="dialog" aria-hidden="true">

<div class="modal-dialog">

<div class="modal-content center-block">

<div class="modal-header">

<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>

<h4 class="modal-title">

请完成人机识别验证

</h4>

</div>

<div class="modal-body">

<div id="showLoading" class="ladda-button" data-style="zoom-in"></div>

<div id="captchaBox" class="center-block">

<span id="geetestLoading"> 验证码组件加载中,请稍后...</span>

</div>

</div>

</div>

</div>

</div>

<div class="block">

<input id="remember_me" type="checkbox" name="remember_me" onkeydown="check_enter(event)" /><label for="remember_me" onkeydown="check_enter(event)">下次自动登录</label>

</div>

<div class="block">

<input type="submit" id="signin" class="button" value="加载中..." /> <span id="tip_btn" class="tip"></span>

</div>

<div class="block nav">

&raquo; <a href="/register.aspx?ReturnUrl=http://i.cnblogs.com/" title="注册成为博客园用户">立即注册</a><br />

&raquo; <a href="http://www.cnblogs.com/ContactUs.aspx">反馈问题</a>

</div>

</form>

<div style="clear: both" />

</div>

</div>

</div>

</body>

</html>

自动获取网页编码方式的方法

安装第三方库chardet,它是用来判断编码的模块,打开cmd,只需要输入指令:

pip install chardet

即可进行下载。

新的代码:

# -*- coding: UTF-8 -*-
from urllib import request
import chardet if __name__ == "__main__":
response = request.urlopen("http://i.cnblogs.com/")
html = response.read()
charset = chardet.detect(html)
print(charset)

返回的结果是一个字典,会告知我们网页的编码方式。

Python3爬虫(1)_使用Urllib进行网络爬取的更多相关文章

  1. 爬虫系列(六) 用urllib和re爬取百度贴吧

    这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图 1.网页分析 (1)准备工作 首先我们使用 Chrome 浏览器打开 百度贴吧,在输入 ...

  2. Python3爬虫(2)_利用urllib.urlopen发送数据获得反馈信息

    一.urlopen的url参数 Agent url不仅可以是一个字符串,例如:https://baike.baidu.com/.url也可以是一个Request对象,这就需要我们先定义一个Reques ...

  3. python3爬虫初探(五)之从爬取到保存

    想一想,还是写个完整的代码,总结一下前面学的吧. import requests import re # 获取网页源码 url = 'http://www.ivsky.com/tupian/xiaoh ...

  4. python3爬虫-通过selenium登陆拉钩,爬取职位信息

    from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from se ...

  5. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  6. 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论

    这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...

  7. 爬虫入门(三)——动态网页爬取:爬取pexel上的图片

    Pexel上有大量精美的图片,没事总想看看有什么好看的自己保存到电脑里可能会很有用 但是一个一个保存当然太麻烦了 所以不如我们写个爬虫吧(๑•̀ㅂ•́)و✧ 一开始学习爬虫的时候希望爬取pexel上的 ...

  8. 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二)

    先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 不多说,直接上代码. 编写代码 运行 <!DOCTYPE html><html><head& ...

  9. 使用Node.js实现简单的网络爬取

    由于最近要实现一个爬取H5游戏的代理服务器,隧看到这么一篇不错的文章(http://blog.miguelgrinberg.com/post/easy-web-scraping-with-nodejs ...

随机推荐

  1. 主动降噪技术(ANC)的前生今世–行业分析

    一 原始玩家 1978年,创始人Amar G. Bose博士在从欧洲飞往波士顿的飞机上,发现飞机引擎的噪音扫净了他戴耳机欣赏音乐的兴致.这激发了他在BOSE公司进行一项消噪科技的研究.弹指之间,十年过 ...

  2. python编程基础之二十五

    匿名函数:不用def 定义的函数,没有函数名 lambda只是一个表达式,函数体比def简单的多 lambda的函数体不再是代码块 lambda只有一行,增加运行效率 lambda [参数1][参数2 ...

  3. SpringCloud之Eureka、Ribbon

    一.微服务架构 简单的说,微服务是系统架构的一种设计风格,它的主旨是将一个原本独立的系统拆分为多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通 ...

  4. UVA - 11795 Mega Man's Mission

    Mega Man is off to save the world again. His objective is to kill the Robots created by Dr. Wily who ...

  5. MacOS 安装MysqlDB 问题解决方案( 解决 IndexError: string index out of range)

    pip install MySQL-python时报错如下: Command "python setup.py egg_info" failed with error code 1 ...

  6. Unreal Engine 4 系列教程 Part 2:蓝图教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  7. JMXtrans + InfluxDB + Grafana实现Zookeeper性能指标监控

    一.总体效果图 这里是将集群全部放在一起,可以根据自己的审美看怎么放 二.监控指标 其中有些指标与第一篇Zookeeper通过四字命令基础监控(Zabbix)的四字命令的指标是有重复的,二者选一个则可 ...

  8. 渗透测试-基于白名单执行payload--Cmstp

    0x01 Cmstp简介 Cmstp安装或删除“连接管理器”服务配置文件.如果不含可选参数的情况下使用,则 cmstp 会使用对应于操作系统和用户的权限的默认设置来安装服务配置文件. 微软官方文档: ...

  9. 代码审计准备之Thinkphp3

    0x01环境部署: 下载: 获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源. 官网提供了稳定版本的下载:http://thinkphp.cn ...

  10. [JZOJ100043] 【NOIP2017提高A组模拟7.13】第K小数

    Description 有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少. Input 输入文件包含三行. 第一行为 ...