博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
阅读量:6295 次
发布时间:2019-06-22

本文共 4035 字,大约阅读时间需要 13 分钟。

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

 

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

urlopen()获取一个URL的html源码

read()读出html源码内容
decode("utf-8")将字节转化成字符串

#!/usr/bin/env python# -*- coding:utf-8 -*-import urllib.requesthtml = urllib.request.urlopen('http://edu.51cto.com/course/8360.html').read().decode("utf-8")print(html)
    

 

正则获取页面指定内容

#!/usr/bin/env python# -*- coding:utf-8 -*-import urllib.requestimport rehtml = 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 requestimport reimport osfile_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 requestimport reimport osfile_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.requestimport rehtml = 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.requestimport rehtml = 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.requestimport rehtml = urllib.request.urlopen('http://edu.51cto.com/course/8360.html')   #获取html源码a = html.geturl()  #获取当前抓取页面的URLprint(a)#http://edu.51cto.com/course/8360.html

 

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

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

#!/usr/bin/env python# -*- coding:utf-8 -*-import urllib.requestimport rehtml = urllib.request.urlopen('http://edu.51cto.com/course/8360.html',timeout=30)   #获取html源码a = html.geturl()  #获取当前抓取页面的URLprint(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.requestimport regjc = "手机"     #设置关键词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*\w*\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.requestimport urllib.parseposturl = "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://jmpta.baihongyu.com/

你可能感兴趣的文章
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>