Python基础+爬虫基础
Python基础+爬虫基础
一、python的安装:
1、建议安装Anaconda,会自己安装一些Python的类库以及自动的配置环境变量,比较方便。
二、基础介绍
1、什么是命名空间:x=1,1存在内存中,x命名空间是存放名字x与1绑定关系的地方。
2、命名空间的加载:python解释器先启动,先加载内置命名空间,然后以文件为基础,加载全局命名空间,在执行文件的过程中如果调用函数,则临时产生局部命名空间。
3、名字的查找顺序:局部命名空间——全局命名空间——内置名称空间。 在全局无法查看局部,在局部可以查看全局。
三、global与nonlocal关键字:
1、什么是闭包:内部函数包对外部作用域而非全局作用域的引用。2、闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包了一层作用域,这使得,该函数无论在何处被调用,优先使用自己外层包裹的作用域。
应用领域:延迟计算
四、装饰器:
定义:装饰他人的器具,本身可以是任意可调用对象,被修饰者也可以是任意可调用对象、
强调装饰器原则:1、不修改被装饰对象的源代码。2、不修改被装饰对象的调用方式。3、装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能。
五、迭代器:
迭代的工具,是一个重复的过程,每次重复一次迭代,并且每次迭代的结果都是下次迭代的初始值。
1、可迭代对象是指内置有 __iter__方法的对象和__next__方法的对象。
2、迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象。
3、迭代器对象的优点:提供一种统一的,不依赖于索引的迭代方式,惰性计算,节省空间。
缺点:无法获取长度(只有在next完毕才知道到底有几个值)
一次性,只能往后走,不能往前退。
六、生成器:
只要函数含有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码。
生成器就是迭代器。
七、yield总结:
把函数做成迭代器,对比return
八、三元表达式:
name=input('姓名:')
res='SB' if name=='alex' else 'NB'
九、匿名函数:
匿名函数没有名字 ,与函数有相同的作用域,但是匿名函意味着引用计数为0,使用一次就释放,除非让其有名字。让其有名字就没有意义。
有名字函数与没有名字函数对比:
1、有名函数:循环使用,保留了名字,通过名字就可以重复引用函数功能。
2、匿名函数:一次性使用,随时随地定义。
十、eval()用来执行字符串表达式,
十一、序列化:
把对象从内存中变成可存储或传输的过程称之为序列化,在Python中叫picking,在其他语言中叫serialization,marshalling,flattening。
1、为什么要序列化:持久保存状态。
2、跨平台数据交互
十二、面向对象高级
1、isinstance(obj,cls)和issubclass(sub,super)
isinstance(obj,cls)检查是否obj是否是类cls的对象。
issubclass(obj,cls)检查sub类是否是super的派生类
2、反射:主要是程序可以访问,检测和修改它本身状态或行为的一种能力。
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以用反射)
#在cal_add函数前加上@property,使得该函数可直接调用,封装起来
#在cal_info函数前加上@classmethon,则该函数变为类方法,该函数只能访问到类的数据属性,不能获取实例的数据属性
#python自动传入位置参数cls就是类本身
#cls.cal_name调用类自己的数据属性
#静态方法 类或实例均可调用
#改静态方法函数里不传入self 或 cls
使用反射的好处:1、实现可插拔机制:事先定义好接口,接口只有在被完成后才会被真正的执行,即先把主要的逻辑写好,然后后期再实现接口功能。
2、动态导入模块(基于反射房钱模块成员)。
十三、 并发编程:
1、并发与并行:无论是并发还是并行在用户看来都是同时运行的,不管是进程还是线程,都是一个任务,真正干活的是CPU,CPU来做这些任务,而CPU同一时刻只能执行一个任务。
1、并发:伪并行:看起来是同时进行的,单个cpu+多道技术就可以实行并发(并行也属于并发)。
2、并行:同时进行,只有具备多个CPU才能实现并行。
单核下可以利用多道技术,多个核,每个核也可以用多道技术(多道技术主要针对的是单核)
十四、爬虫的基本操作
a.爬虫
-定向
-非定向
b.
1、请求网址
2、下载页面
3、筛选:正则表达式
===================开源模块======
1、requests
pip install requests
respoonse= request.get('http://www.baudu.com')
response.text
总结:
response= requests.get('URL')
response.text
response.content
response.encoding
response.aparent.encoding
response.status.code 301永久重定向 302临时重定向
2、beautisoup模块
pip3 install beautisoup4
from bs4 import beautisoup
soup=beautisoup(response.text,parser='html.parser')
soup.find(id='auto-channel-lazyload-article')
总结:
soup= beautisoup('<html>...</html>',features='html.parser')
soup.find('div')
soup.find(id='')
soup.find('div',id='') 返回一个
soup.find_all('div') 返回列表
obj.text
obj.attrs
code:
from bs4 import BeautifuSoup
response=requests.get(
url='http://www.autohome.com.cn/news'
)
response.encoding=response.apprent_encoding
soup=BeautifySoup(response.text,features='html.parser')
target=soup.find(id='auto-channel-lazyload-article')
#print(target)
target.find('li')
print(obj)
需求二::
通过程序自动登录GitHub
post_dict{
"phone":"1111",
"password":"xxx",
""oneMonth:"1",
}
response=request.post{
url:'http://response.cookies.get_dict()'
}
c.模块的详细使用
requests
-参数:
requests.get
requests.post
requests.delete
requests.put
requests.request(
'POST'...
)
requests.request
-method:提交方式
-url:提交地址
-params:在url中传递的参数,GET
requests.request(
method:'GET'
url='http://www/oldboyedu.com'
params-{'k1':'v1','k2':'v2'}
)
http://www.oldboyedu?k1=v1&k2=v2
-data 在请求体里传递数据
requests.request(
method='POST'
url='http://www.oldboyedu.com'
json={'use':'alex','pwd':'123'}
)
请求头:
content-type:application/url-form-encod...
请求体:
use=alex&pwd=123
-json 在请求体中传递数据
requests.request(
methond='POST'
url='http://www.oldboyedu.com'
params-{'k1':'v1','k2':'v2'}
json={'use':'alex','pwd':'123'}
)
PS:字典中嵌套字典时
两种格式请求头和请求体的格式不同
-headers 请求头:
requests.request(
methond='POST'
url='http://www.oldboyedu.com'
params-{'k1':'v1','k2':'v2'}
json={'use':'alex','pwd':'123'}
headers={
'Referer':'' #登录前的访问地址
'User-Agent':'' #使用什么浏览器访问的,可以伪造
}
)
-cookies
Python基础+爬虫基础的更多相关文章
- python从爬虫基础到爬取网络小说实例
一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...
- Python扫描器-爬虫基础
0x1.基础框架原理 1.1.爬虫基础 爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 1.1.基础原理 1.发起HTTP请求 2 ...
- Python BeautifulSoup4 爬虫基础、多线程学习
针对 崔庆才老师 的 https://ssr1.scrape.center 的爬虫基础练习.Threading多线程库.Time库.json库.BeautifulSoup4 爬虫库.py基本语法
- 自学Python六 爬虫基础必不可少的正则
要想做爬虫,不可避免的要用到正则表达式,如果是简单的字符串处理,类似于split,substring等等就足够了,可是涉及到比较复杂的匹配,当然是正则的天下,不过正则好像好烦人的样子,那么如何做呢,熟 ...
- Python归纳 | 爬虫基础知识
1. urllib模块库 Urllib是python内置的HTTP请求库,urllib标准库一共包含以下子包: urllib.error 由urllib.request引发的异常类 urllib.pa ...
- 自学Python四 爬虫基础知识储备
首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏 和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...
- 自学Python五 爬虫基础练习之SmartQQ协议
BAT站在中国互联网的顶端,引导着中国互联网的发展走向...既受到了多数程序员的关注,也在被我们所惦记着... 关于SmartQQ的协议来自HexBlog,根据他的博客我自己也一步一步的去分析,去尝试 ...
- python 网页爬虫 基础篇
首先要连接自己的数据库 import pymysql import requests #需要导入模块 db = pymysql.connect('localhost', 'root', '****** ...
- Python爬虫基础
前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...
随机推荐
- 让Nutz支持最快的模板引擎Smarty4j
Smarty4j是一个开源的模板引擎.没错,它就是著名的php模板引擎之Java移植版. 它特点就是将模板文件或者字符串编译成java类直接执行,所以效率比一般的模板解释的方式处理要快.它发展较晚,所 ...
- 【Unity】鼠标划定范围然后截图~
有时候要重复用某一个场景的某一个角度,都过去好几步了结果总不能再把已经打乱的场景物体再移动回去吧.so~智慧的我完成了伟大的偷懒.截图保存,什么时候要看,直接上图片以假乱真棒棒哒~ 当然这个功能还能用 ...
- MongoDB安装+基础操作
MongoDB 一. 安装 这里展示使用docker安装mongoDB 拉取最新MongoDB镜像 docker pull mongo 运行容器 docker run -itd --name mong ...
- 在GNOME开发人员的努力下,Pango 1.44即将问世
早在5月份,Red Hat的Matthias Clasen共同制定了计划,在近年来相当陈旧的情况下,对Pango布局引擎库进行了一些改进. 这项工作将随着Pango1.44版本的发布而实现,看起来它很 ...
- Easy_Re
这题比较简单,一波常规的操作之后直接上ida(小白的常规操作在以前的博客里都有所以这里不在赘述了),ida打开之后查看一下, 这里应该就是一个入口点了,接着搜索flag字符串, 上面的黄色的部分转换成 ...
- 九宫格 android:stretchMode="columnWidth",缩放与列宽大小同步
转载▼ <GridView android:id="@+store/grid" android:layout_width="wrap_content" ...
- 微信小程序是什么
官方的开发文档 微信小程序写的不多,随便写写 创建项目,分析工具 微信小程序有专门的编辑工具,去官网下载 然后申请一个小程序项目,获得一个appId,然后进入编辑工具就可以直接开发了 编辑工具可以设置 ...
- 007、Java中定义int型变量
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- class(二)--派生类的继承
前言 从我之前的一篇笔记对象的继承中, 我们可以知道JS的继承方式依赖原型链,而比较好的继承方式是寄生组合式继承 先来温习下什么是寄生组合式继承 function Rectangle(length, ...
- java 九数组分数
九数组分数 1,2,3-9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 下面的程序实现了该功能,请填写划线部分缺失的代码. public class A { public static vo ...