爬虫笔记

**发起一个get请求**
?
 导入模块
import request
发起请求
响应对象 = requests.get(网址)


**发起一个带请求头的get请求**
?
requests.get(网址,headers=字典)


**发起一个get请求,带上参数**
?
request.get(url, params=参数字典)
!
效果,会在url后拼上传递的参数
**例如**http://www.baidu.com/?name=zs&age=18
post请求同理


**发起请求,伪装为浏览器**
?
办法,发起请求时,在请求头中添加user-agent数据



**使用代理发起请求**
?
request.get(网址,proxies=代理字典)
!
代理字典的格式:
{"协议":"ip:端口""}
例如:
{"http":"http://12.34.56.01:8000", "https":"https://12.34.56.01:8000"}


**发起一个post请求**
?
requests.post(url, params=参数字典)


**访问用户中心的办法**
?
**一,请求头中带上cookies数据**
request.get(网址,headers=字典)
备注,字典中存一个cookie的键值对
键是:Cookie
值就是类似于这样的字符串:uuid_tt_dd=10_28743412270-1569723942844-420746; dc_session_id=10_1569723942844.879679; 
**二,get方法带上cookie参数,值是一个字典**
**格式:**
response = request.get(url, headers=请求头字典, cookies=cookie字典)
字典的键是:uuid_tt_dd
值是:10_28743412270-1569723942844-420746
字典的完整形态类以于
{
'uuid_tt_dd'='10_28743412270-1569723942844-420746',
'dc_session_id'='10_1569723942844.879679'
}
**三,使用session类**
1,实例化一个对session类对象
2,让该对象去登陆网站,登陆成功对象便得到了cookie数据
3,让该对象去访问用户中心URL,访问时会带上cookie。所以可以得到正确的响应。
**例子:**
s = requests.session()
s.post(登陆url, params=参数字典)
res = s.get(用户中心url)
**如何安装requests模块**
?
pip install requests



**获取响应内容**
?
方式一:string类型的结果
响应对象.text
方式二:bytes数据类型
响应对象.content


**获取响应对象的默认解码格式**
?
响应对象.encoding



**修改响应对象的默认解码格式为utf8**
?
响应对象.encoding="utf8"


**响应对象的text属性与content属性的相同点与不同点**
?
相同点:
都可以拿到响应的内容
不同点:
数据类型不一样
text拿到string类型
content拿到bytes类型
注意:
如果访问的目标是图片,文件,音频视频等,需要使用content属性来拿内容



**根据图片网址img_url,保存图片
介绍流程**
?
1 发起请求,获取响应对象。
2 读取响应对象中的内容,用content属性读,得到图片的内容,bytes类型
3 保存图片,以字节流模式写入内容


**获取响应状态码**
?
响应对象.status_code


**获取响应头**
?
响应对象.headers


**获取响应网址**
?
响应对象.url


**获取请求头**
?
响应对象.request.headers


**伪造成浏览器在访问**
?
通过在请求头中添加user-agent来伪造成浏览器

爬虫经验小结:

基本的爬虫流程
?
一,发起请求,获得响应对象
二,从响应对象中提出有效内容
包括:
后面要爬取的url
期望的数据
三,保存数据
四,发起新的请求或者结束



如何获取下一页的URL地址
?
一,寻找URL规律,根据规律来拼下一页
二,通过"下一页"链接url来找



如何解决破解图片验证码
?
使用打码平台
执行给定的代码,打码平台会识别指定路径的图片验证码
并且返回识别后的结果

多线程爬虫:

如何启动一个线程
?
》导入线程模块
import threading
》创建线程对象
t = threading.Thread(target=函数体,args=(参数,))
》让线程对象运行起来
t.start()
!
明确主线程与子线程的执行与等待关系



获取当前代码中所有的线程对象,得到一个列表
?
threading.enumerate()
!
[<_MainThread(MainThread, started 22116)>, <Thread(Thread-1, started 16752)>, <Thread(Thread-2, started 14352)>] 总的


获取当前线程的对象
?
threading.current_thread()



线程类的定义与启动
?
自定义一个类
让该类继承threading.Thread
同时在自定义类中重写run方法
就可
例子:
class Drawing(threading.Thread):
    def run(self):
        for x in range(3):
            print('正在绘制图片', x)
            time.sleep(1)
》线程类实例化为一个对象并运行:
t2 = Drawing()
t2.start()



让当前的线程全部执行完毕后
主线程再进行下一条
?
线程对象.join()
例子:
t.join()



线程锁的定义与使用
?
定义
import threading
生成线程锁对象
锁对象 = threading.Lock()
上锁
锁对象.acquire()
解锁
锁对象.release()



创建一个线程队列队象
?
代码:
import queue
q = queue.Queue()
补充:
生成一个容量为6的队列对象
q = queue.Queue(6)


往线程队列中存入数据
?
代码:
队列.put(数据)
说明:
如果队列满了,会阻塞
补充:
队列.put(数据,block=False)
队列如果满了,就会报一个错误




从线程队列中取出数据
?
代码:
队列.get()
说明:
队列如果是空的,会阻塞
补充:
队列.get(block=False)
队列如果空了,就会报一个错误



队列中计数器减一
?
队列.task_done()
补充:
一般与队列等待共同使用


队列中的等待
?
队列.join()
可以让任务没有完成的队列,阻塞

scrapy爬虫框架

安装scrapy
?
pip install scrapy



创建项目
?
格式:
scrapy startproject 项目名称
例子:
scrapy startproject xiaoshuo
效果:
会在当前目录创建一个目录



创建爬虫
?
格式:
scrapy genspider 爬虫名称 允许访问的域名
例子:
scrapy genspider qidian www.qidian.com
注意:
要先cd到项目目录中
然后再创建爬虫
效果:
在spiders目录中新增了一个爬虫名.py



爬虫项目运行
?
格式:
scrapy crawl 爬虫名称
例子:
scrapy crawl qidian

配置:
不尊守爬虫协议
ROBOTSTXT_OBEY = False

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值