zoukankan      html  css  js  c++  java
  • 爬虫基础

    一、爬虫的原理

    用户获取网络数据的方式:

    浏览器提交请求->下载网页代码->解析成页面。而网页代码中便包含了我们想要的数据

    爬虫就是模拟浏览器发送请求,然后提取想要的数据,存放于数据库或文件中

    #1、发起请求
    使用http库向目标站点发起请求,即发送一个Request
    Request包含:请求头、请求体等
    
    #2、获取响应内容
    如果服务器能正常响应,则会得到一个Response
    Response包含:html,json,图片,视频等
    
    #3、解析内容
    解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等
    解析json数据:json模块
    解析二进制数据:以b的方式写入文件
    
    #4、保存数据
    数据库
    文件

    二、request

    1、请求方式

    #1、请求方式:
        常用的请求方式:GET,POST
        其他请求方式:HEAD,PUT,DELETE,OPTHONS
    
        ps:用浏览器演示get与post的区别,(用登录演示post)
    
        post与get请求最终都会拼接成这种形式:k1=xxx&k2=yyy&k4=zzz
        post请求的参数放在请求体内:
            可用浏览器查看,存放于form data内
        get请求的参数直接放在url后
    
    #2、请求url
        url全称统一资源定位符,如一个网页文档,一张图片
        一个视频等都可以用url唯一来确定
    
        url编码
        https://www.baidu.com/s?wd=图片
        图片会被编码(看示例代码)
    
    
        网页的加载过程是:
        加载一个网页,通常都是先加载document文档,
        在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求
    
    #3、请求头
        User-agent:请求头中如果没有user-agent客户端配置,
        服务端可能将你当做一个非法用户
        host
        cookies:cookie用来保存登录信息
    
        一般做爬虫都会加上请求头
    
    
    #4、请求体
        如果是get方式,请求体没有内容
        如果是post方式,请求体是format data
    
        ps:
        1、登录窗口,文件上传等,信息都会被附加到请求体内
        2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post 
     

    三、response

    #1、响应状态
        200:代表成功
        301:代表跳转
        404:文件不存在
        403:权限
        502:服务器错误
    
    #2、respone header
        set-cookie:可能有多个,是来告诉浏览器,把cookie保存下来
        
    #3、preview就是网页源代码
        最主要的部分,包含了请求资源的内容
        如网页html,图片
        二进制数据等

    示例:

    import requests
    import re
    import hashlib,time
    
    # def get_index(url):
    #     获取当前url的页面内容
    #     response=requests.get(url)
    #     if response.status_code == 200:
    #         return response.text
    #
    # def parse_index(res):
    #     匹配需要访问的标签
    #     urls=re.findall(r'class="items".*?href="(.*?)"',res,re.S)
    #     return urls
    #
    # def get_detail(urls):
    #     根据需要访问的标签匹配需要的内容标签
    #     for url in urls:
    #         if not url.startswith('http'):
    #             url='http://www.xiaohuar.com%s' %url
    #         r1=requests.get(url)
    #         if r1.status_code == 200:
    #             l=re.findall(r'id="media".*?src="(.*?)"',r1.text,re.S)
    #             if l:
    #                 mp4_url=l[0]
    #                 # print(mp4_url)
    #                 save(mp4_url)
    #
    # def save(url):
    #     保存需要访问的地址内容
    #     print('Download:%s' %url)
    #     r2=requests.get(url)
    #     if r2.status_code == 200:
    #         m=hashlib.md5()
    #         m.update(url.encode('utf-8'))
    #         m.update(str(time.time()).encode('utf-8'))
    #         filename='%s.mp4' %m.hexdigest()
    #         file_path=r'G:\%s' %filename
    #         with open(file_path,'wb') as f:
    #             f.write(r2.content)
    #
    #
    # def main():
    #     匹配所有的页面
    #     for i in range(5):
    #         res1=get_index('http://www.xiaohuar.com/list-3-%s.html' %i)
    #         res2=parse_index(res1)
    #         get_detail(res2)
    #
    #
    # if __name__ == '__main__':
    #     main()

     

  • 相关阅读:
    火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件
    memcache安装环境:WINDOWS 7
    PHP正则表达式
    968. 监控二叉树 力扣(困难) dfs 官方说DP
    375. 猜数字大小 II 力扣(中等) 区间动态规划、记忆化搜索
    629. K个逆序对数组 力扣(困难) 区间动态规划
    剑指 Offer 51. 数组中的逆序对 力扣(困难) 巧用归并排序算法
    488. 祖玛游戏 力扣(困难) dfs
    16. 最接近的三数之和 力扣(中等) 双指针
    319. 灯泡开关 力扣(中等) 数论
  • 原文地址:https://www.cnblogs.com/fenglinglf/p/7794162.html
Copyright © 2011-2022 走看看