python之urllib2简单解析HTML页面之篇一
一、urllib2简单获取html页面
#!/usr/bin/env python
# -*- coding:utf-8 -*- import urllib2
response = urllib2.urlopen('http://www.baidu.com');
html = response.read();
print html
简单的几行代码就能拿到html页面,接下来局势html的解析工作了。
想象很美好,实际操作就出问题了。baidu没有禁止机器人抓取可以正常抓取到页面,但是比如:https://b.ishadow.tech/是禁止机器人抓取的,简单模拟浏览器头部信息也不行。
然后想找个GitHub上的爬虫来试验一下行不行,因此找到了https://github.com/scrapy/scrapy,看样子好像比较叼。
按照readme安装了一下,安装失败了,仔细看了一下文档。
pip install scrapy
官方建议安装在Python的虚拟环境里,描述大概如下(https://doc.scrapy.org/en/latest/intro/install.html#intro-using-virtualenv):
Using a virtual environment (recommended)
TL;DR: We recommend installing Scrapy inside a virtual environment on all platforms. Python packages can be installed either globally (a.k.a system wide), or in user-space. We do not recommend installing scrapy system wide. Instead, we recommend that you install scrapy within a so-called “virtual environment” (virtualenv). Virtualenvs allow you to not conflict with already-installed Python system packages (which could break some of your system tools and scripts), and still install packages normally with pip (without sudo and the likes).
然后决定安装一个Python虚拟环境,命令如下:
$ sudo pip install virtualenv
查看基本使用
$virtualenv -h
Usage: virtualenv [OPTIONS] DEST_DIR
只需要 virtualenv加目标目录就可以了。
因此新建虚拟环境
$virtualevn e27
New python executable in ~/e27/bin/python
Installing setuptools, pip, wheel...done.
启用环境
$source ./bin/activate
注意切换环境成功后当前目录会有标识,如下
➜ e27 source ./bin/activate
(e27) ➜ e27
退出环境
$deactivate
现在开始干正事,在虚拟环境中安装爬虫(https://github.com/scrapy/scrapy)
pip install scrapy
大约三分钟后安装完成,之前直接在全局环境安装尽然还失败了。成功后shell输出如下:
......
Successfully built lxml PyDispatcher Twisted pycparser
Installing collected packages: lxml, PyDispatcher, zope.interface, constantly, incremental, attrs, Automat, Twisted, ipaddress, asn1crypto, enum34, idna, pycparser, cffi, cryptography, pyOpenSSL, queuelib, w3lib, cssselect, parsel, pyasn1, pyasn1-modules, service-identity, scrapy
Successfully installed Automat-0.5. PyDispatcher-2.0. Twisted-17.1. asn1crypto-0.22. attrs-16.3. cffi-1.10. constantly-15.1. cryptography-1.8. cssselect-1.0. enum34-1.1. idna-2.5 incremental-16.10. ipaddress-1.0. lxml-3.7. parsel-1.1. pyOpenSSL-16.2. pyasn1-0.2. pyasn1-modules-0.0. pycparser-2.17 queuelib-1.4. scrapy-1.3. service-identity-16.0. w3lib-1.17. zope.interface-4.3.
安装好scrapy后尝试一个简单的连接
(e27) ➜ e27 scrapy shell 'http://quotes.toscrape.com/page/1/'
得到一堆结果如下
-- :: [scrapy.core.engine] INFO: Spider opened
-- :: [scrapy.core.engine] DEBUG: Crawled () <GET http://quotes.toscrape.com/page/1/> (referer: None)
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x1100bab50>
[s] item {}
[s] request <GET http://quotes.toscrape.com/page/1/>
[s] response < http://quotes.toscrape.com/page/1/>
[s] settings <scrapy.settings.Settings object at 0x1100baad0>
[s] spider <DefaultSpider 'default' at 0x11037ebd0>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s] fetch(req) Fetch a scrapy.Request and update local objects
[s] shelp() Shell help (print this help)
[s] view(response) View response in a browser
证明是可以工作的,然后试一下连接:https://b.ishadow.tech/
(e27) ➜ e27 scrapy shell 'https://b.ishadow.tech/'
结果如下:
-- :: [scrapy.middleware] INFO: Enabled item pipelines:
[]
-- :: [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:
-- :: [scrapy.core.engine] INFO: Spider opened
-- :: [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://b.ishadow.tech/> (failed 1 times): TCP connection timed out: 60: Operation timed out.
-- :: [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://b.ishadow.tech/> (failed 2 times): TCP connection timed out: 60: Operation timed out.
-- :: [scrapy.downloadermiddlewares.retry] DEBUG: Gave up retrying <GET https://b.ishadow.tech/> (failed 3 times): TCP connection timed out: 60: Operation timed out.
Traceback (most recent call last):
爬去超时了,看来是被识别出来是机器人爬取内容被拒绝的(当然此时站点通过浏览器是可以访问的),厉害了我的哥!到这里你是不是已经猜到我的真实目的了,没有的话请打开我爬取得连接看看就知道了。
python之urllib2简单解析HTML页面之篇一的更多相关文章
- Python爬虫 | re正则表达式解析html页面
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"). 正则表达式通常被用来匹配.检索.替换和 ...
- (数据科学学习手札103)Python+Dash快速web应用开发——页面布局篇
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- python笔记27-lxml.etree解析html
前言 之前分享过一个python爬虫beautifulsoup框架可以解析html页面,最近看到lxml框架的语法更简洁,学过xpath定位的,可以立马上手. 使用环境: python 3.6 lxm ...
- Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)
Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...
- Android开发探秘之三:利用jsoup解析HTML页面
这节主要是讲解jsoup解析HTML页面.由于在android开发过程中,不可避免的涉及到web页面的抓取,解析,展示等等,所以,在这里我主要展示下利用jsoup jar包来抓取cnbeta.com网 ...
- python的urllib2库详细使用说明
一直以来技术群里会有新入行的同学提问关于urllib和urllib2以及cookielib相关的问题.所以我打算在这里总结一下,避免大家反复回答同样的问题浪费资源. 这篇属于教程类的文字,如果你已经非 ...
- 使用MSHTML解析HTML页面
最近在写一个爬虫项目,本来打算用C/C++来实现,在网上查找有关资料的时候发现了微软的这个MSHTML库,最后发现在解析动态页面的时候它的表现实在是太差:在项目中需要像浏览器那样,执行JavaScri ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- Python -- Json 数据编码及解析
Python -- Json 数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...
随机推荐
- 【BZOJ4418】[Shoi2013]扇形面积并 扫描线+线段树
[BZOJ4418][Shoi2013]扇形面积并 Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. Input 第一行是三个整数n,m,k.n代表同心扇形的个数,m用 ...
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- C++中堆和栈的完全解析
C++中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并 ...
- stark - filter、pop、总结
一.filter 效果图 知识点 1.配置得显示Filter,不配置就不显示了 list_filter = ['title','publish', 'authors'] 2.前端显示 后端返回 字典 ...
- Python开发【笔记】:concurrent.futures 平行运算
平行运算 前言: 编写Python程序时,我们可能会遭遇性能问题,即使优化了代码,程序也依然有可能运行的很慢,从而无法满足我们对执行速度的要求,目前的计算机,其cpu核心数越来越多,于是,我们可以考虑 ...
- s3对象存储
bkstorages 模块帮助你在蓝鲸应用中使用多种文件存储服务作为后端,用于加速静态资源,管理用户上传文件. 自定静态文件 storage 如果通过修改配置文件满足不了你的需求,你随时可以通过继承 ...
- 如何编写一个python项目
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397616003925a ...
- python 面向对象 类 __doc__
用来打印类的描述信息 class A1(object): '''类的描述信息''' print(A1.__doc__) # 类的描述信息
- Java实现最基本的集中排序
排序是一个很重要的概念,现实生活中,我们需要为很多的东西排序.下面我们就介绍几种简单的排序的方法和最基本的思想. 1.冒泡排序:假设一个数组中有10个数字,从左边开始
- EditPlus 4.3.2473 中文版已经发布(10月21日更新)
新的 EditPlus 修复了如下问题: * Ctrl+鼠标拖放文本功能异常 * 上传文件到 FTP 服务器失败后将弹出对话框,可重试上传 * 列选模式下粘贴到现存的选中内容时文本错乱的问题 本博客已 ...