第三百二十七节,web爬虫讲解2—urllib库爬虫

利用python系统自带的urllib库写简单爬虫

urlopen()获取一个URL的html源码
read()读出html源码内容
decode("utf-8")将字节转化成字符串

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html').read().decode("utf-8")
print(html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-param" content="_csrf">
<meta name="csrf-token" content="X1pZZnpKWnQAIGkLFisPFT4jLlJNIWMHHWM6HBBnbiwPbz4/LH1pWQ==">

正则获取页面指定内容

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html').read().decode("utf-8") #获取html源码
pat = "51CTO学院Python实战群\((\d*?)\)" #正则规则,获取到QQ号
rst = re.compile(pat).findall(html)
print(rst) #['325935753']

urlretrieve()将网络文件下载保存到本地,参数1网络文件URL,参数2保存路径

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from urllib import request
import re
import os file_path = os.path.join(os.getcwd() + '/222.html') #拼接文件保存路径
# print(file_path)
request.urlretrieve('http://edu.51cto.com/course/8360.html', file_path) #下载这个文件保存到指定路径

urlcleanup()清除爬虫产生的内存

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from urllib import request
import re
import os file_path = os.path.join(os.getcwd() + '/222.html') #拼接文件保存路径
# print(file_path)
request.urlretrieve('http://edu.51cto.com/course/8360.html', file_path) #下载这个文件保存到指定路径
request.urlcleanup()

info()查看抓取页面的简介

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html') #获取html源码
a = html.info()
print(a) # C:\Users\admin\AppData\Local\Programs\Python\Python35\python.exe H:/py/15/chshi.py
# Date: Tue, 25 Jul 2017 16:08:17 GMT
# Content-Type: text/html; charset=UTF-8
# Transfer-Encoding: chunked
# Connection: close
# Set-Cookie: aliyungf_tc=AQAAALB8CzAikwwA9aReq63oa31pNIez; Path=/; HttpOnly
# Server: Tengine
# Vary: Accept-Encoding
# Vary: Accept-Encoding
# Vary: Accept-Encoding

getcode()获取状态码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html') #获取html源码
a = html.getcode() #获取状态码
print(a) #

geturl()获取当前抓取页面的URL

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html') #获取html源码
a = html.geturl() #获取当前抓取页面的URL
print(a) #http://edu.51cto.com/course/8360.html

timeout抓取超时设置,单位为秒

是指抓取一个页面时对方服务器响应太慢,或者很久没响应,设置一个超时时间,超过超时时间就不抓取了

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html',timeout=30) #获取html源码
a = html.geturl() #获取当前抓取页面的URL
print(a) #http://edu.51cto.com/course/8360.html

自动模拟http请求

http请求一般常用的就是get请求和post请求

get请求

比如360搜索,就是通过get请求并且将用户的搜索关键词传入到服务器获取数据的

所以我们可以模拟百度http请求,构造关键词自动请求

quote()将关键词转码成浏览器认识的字符,默认网站不能是中文

#!/usr/bin/env python
# -*- coding: utf-8 -*- import urllib.request
import re
gjc = "手机" #设置关键词
gjc = urllib.request.quote(gjc) #将关键词转码成浏览器认识的字符,默认网站不能是中文
url = "https://www.so.com/s?q="+gjc #构造url地址
# print(url)
html = urllib.request.urlopen(url).read().decode("utf-8") #获取html源码
pat = "(\w*<em>\w*</em>\w*)" #正则获取相关标题
rst = re.compile(pat).findall(html)
# print(rst)
for i in rst:
print(i) #循环出获取的标题 # 官网 < em > 手机 < / em >
# 官网 < em > 手机 < / em >
# 官网 < em > 手机 < / em > 这么低的价格
# 大牌 < em > 手机 < / em > 低价抢
# < em > 手机 < / em >
# 淘宝网推荐 < em > 手机 < / em >
# < em > 手机 < / em >
# < em > 手机 < / em >
# < em > 手机 < / em >
# < em > 手机 < / em >
# 苏宁易购买 < em > 手机 < / em >
# 买 < em > 手机 < / em >
# 买 < em > 手机 < / em >

 post请求

urlencode()封装post请求提交的表单数据,参数是字典形式的键值对表单数据
Request()提交post请求,参数1是url地址,参数2是封装的表单数据

#!/usr/bin/env python
# -*- coding: utf-8 -*- import urllib.request
import urllib.parse posturl = "http://www.iqianyue.com/mypost/"
shuju = urllib.parse.urlencode({ #urlencode()封装post请求提交的表单数据,参数是字典形式的键值对表单数据
'name': '',
'pass': ''
}).encode('utf-8')
req = urllib.request.Request(posturl,shuju) #Request()提交post请求,参数1是url地址,参数2是封装的表单数据
html = urllib.request.urlopen(req).read().decode("utf-8") #获取post请求返回的页面
print(html)

第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求的更多相关文章

  1. 六 web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求

    利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码read()读出html源码内容decode("utf-8")将字节转化成字符串 ...

  2. 第三百二十九节,web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用

    第三百二十九节,web爬虫讲解2—urllib库爬虫—ip代理 使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置build_opener ...

  3. 第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

    第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解 封装模块 #!/usr/bin/env python # -*- coding: utf- ...

  4. 第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理

    第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术.设置用户代理 如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执 ...

  5. 七 web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理

    如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执行下去 1.常见状态吗 301:重定向到新的URL,永久性302:重定向到临时URL,非永久性304: ...

  6. 八 web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用

    使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置build_opener()初始化IPinstall_opener()将代理IP设置成全 ...

  7. 九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

    封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import j ...

  8. 第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码

    第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码 scrapy-redis是一个可以scrapy结合redis搭建分布式爬虫的开 ...

  9. 第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中

    第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中 前面我们讲到的elasticsearch( ...

随机推荐

  1. 菜鸟学SSH(六)——Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.Tran ...

  2. 菜鸟学Java(十一)——GET与POST

    相信大家在面试的时候经常会被问到:GET与POST有什么区别吧?你是怎么回答的呢?POST比GEt安全?GET有URL的长度限制而POST没有或者很大?GET通过URL或者Cookie传参数,POST ...

  3. 每日英语:Google Scraps Plan to Build Hong Kong Data Center

    Internet giant Google Inc. has scrapped a plan to build its own data center in Hong Kong and will in ...

  4. 找个些有用的网站(CSS生成)

    http://www.shejidaren.com/css-button-generator-and-beautifucl-style-sheet.html

  5. C# IOCP服务器项目(学习)

    无论什么平台,编写支持高并发性的网络服务器,瓶颈往往出在I/O上,目前最高效的是采用Asynchronous I/O模型,Linux平台提供了epoll,Windows平台提供了I/O Complet ...

  6. SolrCloud基本过程

    转:http://www.data321.com/yunjisuan/20160514880/SolrZhiJieDuQuZKZhongDePeiZhiXin SolrCloud之分布式索引及与Zoo ...

  7. 关于RAID_1+0和RAID_0+1的比较

    RAID的概念就不多说了,说说 RAID 0 和 RAID 1 . RAID 0 是条带存储,叠加所有硬盘容量,因此不具有容错性,原理如下图所示: RAID 1 使用非常原始的方式(复制一份.镜像)进 ...

  8. 【爬虫】通用抽取网页URL

    package model; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; i ...

  9. WebAPI 消息处理器

    由上图可以看出消息处理器的使用场合和使用方法. 使用场合: HttpServer 得到请求时. public static class WebApiConfig { public static voi ...

  10. [转]MySQL如何设置自动增长序列 SEQUENCE

    原文地址:https://blog.csdn.net/czbqoo01/article/details/70148516 解决思路:由于mysql不带sequence,所以要手写的,创建一张储存seq ...