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

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

利用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>
<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)

#200

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': '123',
    'pass': '456'
    }).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)

【转载自:http://www.lqkweb.com

相关文章
|
14天前
|
XML 网络协议 Java
JavaWeb -- HTTP -- WEB服务器TOMCAT
JavaWeb -- HTTP -- WEB服务器TOMCAT
|
20天前
|
安全 网络协议 Ubuntu
【常见开源库的二次开发】HTTP之libcurl库——libcurl使用(二)
【常见开源库的二次开发】HTTP之libcurl库——libcurl使用(二)
32 2
|
1天前
|
缓存 网络协议 安全
应用层---Web和HTTP
应用层---Web和HTTP
10 3
应用层---Web和HTTP
|
19天前
|
JSON API 数据格式
Requests库:轻松实现Python中的HTTP请求
Requests是Python的第三方HTTP库,简化了HTTP请求的发送,支持GET、POST等方法。要安装,使用`pip install requests`。Requests以其简洁API和强大功能成为网络编程首选工具,为开发者提供高效稳定的网络交互体验。
31 5
|
20天前
|
缓存 网络协议 安全
【常见开源库的二次开发】HTTP之libcurl库——基础知识扫盲(一)
【常见开源库的二次开发】HTTP之libcurl库——基础知识扫盲(一)
25 1
|
28天前
|
JavaScript 前端开发
基于 Node.js 环境,使用内置 http 模块,创建 Web 服务程序
基于 Node.js 环境,使用内置 http 模块,创建 Web 服务程序
|
7天前
|
缓存 网络协议 应用服务中间件
深入理解 web 协议(一)- http 包体传输
深入理解 web 协议(一)- http 包体传输
|
9天前
|
Java 应用服务中间件 程序员
JavaWeb基础第四章(SpringBootWeb工程,HTTP协议与Web服务器-Tomcat)
JavaWeb基础第四章(SpringBootWeb工程,HTTP协议与Web服务器-Tomcat)
|
20天前
|
API Python
Python HTTP请求库对比,以实战请求豆瓣排行榜为例
对比了Python的几个HTTP请求库,包括`requests`、`http.client`、`aiohttp`、`urllib`、`httpx`、`treq`和`requests-toolbelt`,各有特点和优缺点。选择时应考虑项目需求(如异步支持)、易用性、社区支持、性能和兼容性。示例展示了如何使用`requests`和`aiohttp`库发送豆瓣电影排行榜的GET请求。
17 0
|
27天前
|
网络协议 开发者 UED
【计算巢】HTTP/2 与 HTTP/3:下一代 Web 协议的优势
【5月更文挑战第31天】HTTP/2 & HTTP/3,两大网络协议超级英雄,通过二进制分帧、多路复用提升效率,QUIC协议让HTTP/3实现更快连接与低延迟。代码示例展示HTTP/2高效请求,它们为用户带来更快加载速度,改善体验,尤其利于高延迟应用。对开发者意味着更高性能,为网站注入超级引擎。未来,它们将在更多领域发挥作用,点亮数字世界。