目录

  一、爬虫的步骤

  二、使用Jupyter

  三、爬虫请求模块之urllib

  四、爬虫请求模块之requests

  五、爬虫分析之re模块

一、爬虫的步骤

  1.发起请求,模拟浏览器发送一个http请求

  2.获取响应的内容

  3.解析内容(解析出对自己有用的部分)

    a.正则表达式

    b.BeautifulSoup模块

    c.pyquery模块

    d.selenium模块

  4.保存数据

    a.文本文件(txt,csv等)

    b.数据库(mysql)

    c.redis,mongdb(最长使用)

二、使用Jupyter

  2.1.使用理由:Jupyter可以一次执行,讲结果保存到内存里,供后面python语句多次使用,避免每次调试程序,都要重新请求网页,频繁爬取某个网页,容易导致该网站封IP

  2.2.使用步骤:

    a.安装:pip install jupyter (前提是已经安装了python3)

    b.运行:jupyter  notebook,浏览器自动弹出使用界面

    c.右侧New-->python3,新建一个python程序

  2.3.快捷键

    shift + enter键  :选定行执行,执行结果保留到内存

三、爬虫请求模块之urllib

  3.1 urllib介绍

Python标准库中提供了:urllib等模块以供Http请求,但是它的API能力不佳,需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务,不推荐使用,此处只是了解一下

  3.2 简单使用

#方式一:
import urllib.request f = urllib.request.urlopen('http://www.baidu.com')
result = f.read().decode('utf-8')
print(result) #方式二:
import urllib.request
req = urllib.request.Request('http://www.baidu.com')
response = urllib.urlopen(req)
result = response.read().decode('utf-8')
print(result) ps:硬要使用urllib模块,推荐使用方式二,因为req是一个Request对象,在这个对象里,可以定义请求的头部信息,这样可以把自己包装成像个浏览器发起的请求,如下面的一个例子

  3.3自定义请求头信息

import urllib.request
req = urllib.request.Request('http://www.example.com') #自定义头部,第一个参数为关键字参数key,第二个参数为内容
req.add_header("User-Agent","Mozilla/5.0(X11;Ubuntu;Linux x86_64;rv:39.0) Gecko/20100101 Firefox/39.0") f = urllib.request.urlopen(req)
result = f.read().decode('utf-8') #有一个模块fake_useragent可以随机产生User-Agent信息,对于网站的反爬虫机制有一定的欺骗作用

  3.4 fake_useragent使用

#1.安装pip install fake_useragent

#2.基本使用
from fake_useragent import UserAgent
ua = UserAgent()
print(ua.chrome) #产生一个谷歌的内核字段 #常用属性
ua.chrome #产生一个谷歌的内核字段
ua.ie #随机产生ie内核字段
ua.firefox #随机产生火狐内核字段
ua.random #随机产生不同浏览器的内核字段

四、爬虫请求模块之requests

  4.1 requests模块介绍

Requests是使用Apache2 Licensed许可证的,基于Python开发的HTTP库,其在Python内置模块的基础上进行了高度的封装,从而使得进行网络请求时,
变得美好了许多,而且使用Requests可以轻而易举的完成浏览器可以做到的任何操作

  4.2 requests安装

pip3 install requests

  4.3 简单使用

import requests

r = requests.get('http://www.example.com')
print(type(r))
print (r.status_code) #服务器返回的状态码
print (r.encoding) #网站使用的编码
print (r.text) #返回的内容,字符串类型

  4.4 get请求

#1.无参数实例
import requests
res = requests.get('http://www.example.com') print (res.url) #打印请求的url
print (res.text) #打印服务器返回的内容 #2.有参数实例
import requests
payload = {'k1':'v1','k2':'v2'}
res = requests.get('http://httpbin.org/get',params=payload) print (res.url)
print (res.text) #3.解析json
import requests
import json response = rquests.get('http://httpbin.org/get')
print (type(response.text)) #返回结果是字符串类型
pirnt (response.json()) #字符串转成json格式
print (json.loads(response.text)) #字符串转成json格式
print (type(response.json())) #json类型 #4.添加headers
import requests
from fake_useragent import UserAgent
ua = UserAgent() #自定义请求头部信息
headers= {
'User-Agent':ua.chrome
}
response = requests.get('http://www.zhihui.com',headers = headers)
print (response.text)

  4.5 post请求

#1.基本POST实例

import requests

#当headers为application/content的时候,请求实例如下:
payload = {'k1':'v1','k2':'v2'}
res = requests.post('http://httpbin.org/post',data = payload) print (res.text)
print (type(res.headers),res.headers)
print (type(res.cookies),res.cookies)
print (type(res.url),res.url)
print (type(res.history),res.history) #2.发送请求头和数据实例
import json
import requests url = 'http://httpbin.org/post'
payload = {'some':'data'}
headers = {'content-type':'application/json'} #当headers为application/json的时候,请求实例如下:
res = requests.post(url,data=json.dumps(payload), headers = headers) print (res.text)

  4.6关于get与post请求的差别

get请求方法参数只有params,而没有data参数,而post请求中两者都是有的

  4.7 http返回代码

 100:continue
101 : switching_protocols
102 : processing
103 : checkpoint
122 : uri_too_long , request_uri_too_long 200 : ok , okay, all_ok all_okay , all_good, \\o/ , '√'
201 : created
202 : accepted
203 : non_authoritative_info , non_authoritative_information
204 : no_content
205 : rest_content , reset
206 : partial_content, partial
207 :multi_status , multiple_status multi_stati multiple_stati
208 : already_reported
226 : im_used #Redirection
300 :multipel_choices
301 : moved_permanently , moved , \\o-
302 : found
303 : see_other , other
304 : not_modified
305 : use_proxy
306 : switch_proxy
307 : remporay_redirect , temporary_moved , temporary
308 : permanent_redirect , resume_incomplete , resume #These 2 to be removed in 3.0 #client Error
400 :bad_request , bad
401 : unauthorized
402 : payment_required payment
403 : forbiden
404 : not_found , -o-
405 : method_not_allowed not_allowed
406 : not_acceptable
407 : proxy_authentication_required , proxy_auth , proxy_authentication
408 : request_timeout , timeout
409 : conflict
410 :gone
411 :length_required
412 : precondition_failed , precondition
413 : request_entity_too_large
414 : requests_uri_too_large
415 : unsupported_media_type, unsupported_media , media_type
416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
417: ('expectation_failed',),
418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
421: ('misdirected_request',),
422: ('unprocessable_entity', 'unprocessable'),
423: ('locked',),
424: ('failed_dependency', 'dependency'),
425: ('unordered_collection', 'unordered'),
426: ('upgrade_required', 'upgrade'),
428: ('precondition_required', 'precondition'),
429: ('too_many_requests', 'too_many'),
431: ('header_fields_too_large', 'fields_too_large'),
444: ('no_response', 'none'),
449: ('retry_with', 'retry'),
450: ('blocked_by_windows_parental_controls', 'parental_controls'),
451: ('unavailable_for_legal_reasons', 'legal_reasons'),
499: ('client_closed_request',),
# Server Error.
500: ('internal_server_error', 'server_error', '/o\\', '✗'),
501: ('not_implemented',),
502: ('bad_gateway',),
503: ('service_unavailable', 'unavailable'),
504: ('gateway_timeout',),
505: ('http_version_not_supported', 'http_version'),
506: ('variant_also_negotiates',),
507: ('insufficient_storage',),
509: ('bandwidth_limit_exceeded', 'bandwidth'),
510: ('not_extended',),
511: ('network_authentication_required', 'network_auth', 'network_authentication')

  4.8 获得cookies

#会话登录
import requests s = requests.Session()
s.get('http://www.httpbin.org/cookies/set/123456789') #设置cookies
res = s.get('http://www.httpbin.org/cookies') #获得cookies
print (res.text) #打印cookies 此httpbin.org是通过以上方式来设置cookies #获得cookie
import requests
response = requests.get('http://www.baidu.com')
#print ('response.cookies') for key,value in reponse.cookies.items():
print (key + '=' + value) #组合key = value

  4.7 SSL设置

#ssl设置
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
res = requests.get('http://www.12306.cn',verify = False)
print (res.status_code) #证书认证
import requests
res = requests.get('https://www.12306.cn',cert=('/path/server.crt','/path/key'))
print (res.status_code)

  4.8 代理设置

import requests
proxies = {
"http":"http://127.0.0.1:9746",
"https":"https://127.0.0.1:9924"
} res = requests.get("http://www.taobao.com",proxies = procies)
print (res.status_code) #有密码的代理
import requests
proxies = {
"https":"https://user:password@127.0.0.1:9924"
} res = requests.get("http://www.taobao.com",proxies = procies)
print (res.status_code)

  4.9 超时时间设置与异常处理

import requests
from requests.exceptions import ReadTimeout
try:
res = requests.get('http://httpbin.org/get',timeout=0.5)
except ReadTimeout:
print ('Timeout')

  4.10 案例:检测QQ是否在线

import urllib
import requests
from xml.etree import ElementTree as ET #使用内置模块urllib发送http请求
r = urllib.request.urlopen('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=3455306**')
result = r.read().decode('utf-8') #使用第三方模块requests发送http请求
r = requetsts.get('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=3455306**')
result = r.text #解析XML格式内容
node = ET.XML(result) #获取内容
if node.text =='Y':
print ('在线')
else:
print ('离线')

五、爬虫分析之re模块

  5.1 关于re模块的使用方法

http://www.cnblogs.com/lisenlin/articles/8797892.html#1

  5.2 爬虫简单案例

import requests
import re
from fake_useragent import UserAgent def get_page(url):
ua = UserAgent()
headers = {
'User-Agent':ua.chrome,
}
response = requests.get(url, headers = headers)
try:
if response.status_code == 200:
res = response.text
return res
return None
except Exception as e:
print(e) def get_movie(html):
partten = '<p.*?><a.*?>(.*?)</a></p>.*?<p.*?>(.*?)</p>.*?<p.*?>(.*?)</p>'
items = re.findall(partten, html, re.S)
#print((items))
return items def write_file(items):
fileMovie = open('movie.txt', 'w', encoding='utf8')
try:
for movie in items:
fileMovie.write('电影排名:' + movie[0] + '\r\n')
fileMovie.write('电影主演:' + movie[1].strip() + '\r\n')
fileMovie.write('上映时间:' + movie[2] + '\r\n\r\n')
print('文件写入成功...')
finally:
fileMovie.close() def main(url):
html = get_page(url)
items = get_movie(html)
write_file(items) if __name__ == '__main__':
url = "http://maoyan.com/board/4"
main(url)

Python模块之requests,urllib和re的更多相关文章

  1. windows安装Python模块:requests

    个人在windows10安装python模块requests如下过程: 1.下载requests模块:首先打开powershell, cd到你要下载文件的位置(我的是d:\softwareinstal ...

  2. Python模块之Requests

    目录 Requests 模块 常规的get请求 基于ajax的get请求 常规的post请求 基于ajax的post请求 综合项目实战 requests模块高级 requests代理 验证码处理 Re ...

  3. python模块(requests,logging)

    一.requests Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythone ...

  4. python模块中requests参数stream

    PS:这个参数真没用过 当下载大的文件的时候,建议使用strea模式. 默认情况下是false,他会立即开始下载文件并存放到内存当中,倘若文件过大就会导致内存不足的情况. 当把get函数的stream ...

  5. python之urllib模块和requests模块

    一.urllib模块 python标准库自带的发送网络请求的模块. # 用python怎么打开浏览器,发送接口请求 import urllib from urllib.request import u ...

  6. Pthon常用模块之requests,urllib和re

    urllib Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了. 它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务, 下面是简单的使用urllib来 ...

  7. python网络编程----requests模块

    python访问网站可以用标准模块--urllib模块(这里省略),和requests(安装-pip install requests)模块,requests模块是在urllib的基础上进行的封装,比 ...

  8. Python高手之路【八】python基础之requests模块

    1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2  ...

  9. Python内置的urllib模块不支持https协议的解决办法

    Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内 ...

随机推荐

  1. dockerfile 制作镜像

    # Set the base image to UbuntuFROM ubuntu # File Author chenghanMAINTAINER chenghan ################ ...

  2. springboot-多模块构建

    1. 场景描述 先介绍下背景,项目为什么需要用多模块?springmvc难道还不够? (1)设计模式真言:"高内聚.低耦合",springmvc项目,一般会把项目分成多个包:con ...

  3. ‎Cocos2d-x 3.x 学习笔记(三):Scheduler Timer 调度与定时

    ‎1. 概述 Cocos2d-x 的 Scheduler 离不开 Timer.Timer 类是定时器,用来规定一个回调函数应该在何时被触发.Timer 封装了已运行时间.重复次数.已执行次数.延迟秒数 ...

  4. Spring_AOP基于AspectJ的注解开发&JDBC的模板使用&事务管理(学习笔记3)

    一:AOP基于AspectJ的注解开发 1,简单的实例: 1)引入相应的jar包 ​ 2)在配置文件里引入相关约束 <beans xmlns="http://www.springfra ...

  5. GIL与异步回调

    07.07自我总结 一.GIL 1.概念 在CPython中,这个全局解释器锁,也称为GIL,是一个互斥锁 2.带来的问题 首先必须明确执行一个py文件,分为三个步骤 从硬盘加载Python解释器到内 ...

  6. Java中的I/O输入输出流概述

    流是一组有序的数据序列,根据操作类型,可以分为输入流和输出流两种,Java语言中定义的负责各种输入输出的类都被放在java.io包中.其中所有的输入流类都是抽象类InputStream(字节输入流)或 ...

  7. Java EE产生的背景

    为了满足开发多层体系结构的企业级应用的需求,Java公司的创始人Sun公司在早期的J2SE(Java 2 Platform Standard Edition)基础上,针对企业级应用的各种需求,提出了J ...

  8. js,ts操作dom总结

    以上面为例: js获取placeholder节点 : document.getElementsByClassName("newTicket")[0].getAttributeNod ...

  9. centos7下yum方式安装MySQL5.7

    前言: MySQL作为一款免费.开源数据库产品,已经问世就饱受关注,很多中小企业甚至是大企业都钟爱MySQL,随着大数据的不断发展,我们接触的信息量也越来越多,虽然NoSQL是大数据的宠儿,但MySQ ...

  10. 【iOS】安装 CocoaPods

    1. 打开 terminal 2. 移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3. 使用新的源 $ gem sources ...