python爬虫入门

我就是Python!!!!Hello,I’m Python

python 爬虫的好处

Python:语法优美,语法简洁,开发效率高,而且Python有很多第三方库 , 对多任务的支持也比较友好,并且有成熟的scrapy爬虫框架和sacrpy-redis分布式策略

爬虫流程

  1. 确定目标网站的url
  2. 发起请求,获取响应
  3. 提取数据
    • 判断是否需要跟进
    • 提取新的url,执行第二步循环

分类

  • 通用爬虫
    • 一般是搜索引擎的重要组成部分,尽可能的爬取全网的数据,并将页面进行本地存储,处理
    • 缺点:
      1. 需要遵守REBOT协议,有些路径不允许访问
      2. 只能够爬去简单的文字,并不支持二进制
      3. 不能够根据不同用户返回不同的结果
      4. 返回的是全部页面,有很多信息用不到
    • 聚焦爬虫
      • 有目的姓的爬取网页的数据

常见状态码

  • 100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。

  • 2xx:表示服务器成功接收请求并已完成整个处理过程。

    • 200(OK 请求成功)。
  • 3xx:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、 常用

    • 301: 永久重定向
    • 302:临时重定向(所请求的页面已经临时转移至新的url)
  • 4xx:客户端的请求有错误.

    • 400:错误请求,服务器无法解析请求
    • 401:未授权,没有进行身份验证
    • 403:服务器拒绝访问
    • 404:服务器无法找到被请求的网页
    • 408:请求超时
  • 5xx:服务器端出现错误

    • 500:服务器内部错误
    • 501:服务器不具备完成请求的功能
    • 503:服务器不可用

urllib 携带参数

import urllib.request as request
import urllib.parse as parse

# 使用urlencode()方法,将参数转换为url编码格式 

data = {
    'wd':'美女'
}
aa = parse.urlencode(data)
ful = 'http://www.baidu.com/s?'+ aa
response = request.urlopen(ful)
# 获取页面二进制数据
response.read()
# 获取响应头 
response.getheaders()

# 解码
# 二进制--->>字符串
decode()

# 编码
# 字符串----->>二进制 
encode()

# 如果要将转换编码格式 需要先解码 在编码
构建Request对象
from urllib import request

headers = {
    'User-Agent':'dddsdsfdf',
    'Refer':'',
    'Cookie':''
}
# request.Request()的参数:
# url -->目标url
# data --> 有数据表示POST请求
# headers --> 请求参数
# method---> 请求方法


req = request.Request(url='',headers='',)
response=request.urlopen(req)

Post 请求

在python的urllib 模块中,Post请求的数据需要转码。栗:

from urllib import parse
data = {
	'name':'张三',
	'age':2,
	'sex':'男/女'
}
from_data = parse.urlencode(data).encode("utf-8")
req = requset.Request(url='',headers='',data=from_data)
response = request.urlopen(req)

注意:在urllib 模块中,如果Request对象没有data参数,是Get请求;有data参数,就是Post请求

附上简单栗子
from urllib import request
from urllib import parse

def main():
# 请求头
    header={
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }

    for i in range(11):
        data = {
            'kw': '美女',
            'pn': (int(i) - 1) * 50
        }
        data = parse.urlencode(data)
        # 构建url
        url = 'https://tieba.baidu.com/f?'+data
        req = request.Request(url=url,headers=header)
        response = request.urlopen(req)
        # 将二进制转换utf-8格式
        html = response.read().decode('utf-8')
        # print(html
        print('写入'+str(i)+'页')
        # 存入本地
        with open('page'+str(0000)+'.html','w') as f:
            f.write(html)

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值