• 八月份课堂--Python爬虫(Spider)基础


    一、爬虫(Spider)

     爬虫步骤 
    网页抓取,数据提取,数据存储

    请求网站,提取网页内容的最大化程序。获取到的是html代码,需要从这些文本中提取需要的数据。

    HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

    HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

    SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议。SSL在传输层对网络连接进行加密

    公众平台接口不再支持http方式调用,在 2017年12月30日 后所有网站都必须是 HTTPS 方式调用

    URL(统一资源定位符)基本格式:

    基本格式:scheme://host[:port#]/path/.../[?query-string][#anchor]
    scheme:协议。如:http、https、ftp
    host:服务器的IP地址or域名。如:192.168.0.11
    port#:服务器的端口。(http默认端口为80,https默认端口为443)
    path:访问资源的路径
    query-string:参数,发送给http服务器的数据
    anchor:锚(跳转到网页的指定铺点链接地址)
     
     
    GET是从服务器上获取数据,POST是向服务器传送数据。
    在客户端, GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交

    GET请求相当于我们在数据库中做了查询的操作,不影响数据库本身的数据。
    POST请求相当于在数据库中做了修改的操作,会影响数据库本身的数据(如:注册、发帖、评论、得到积分,此时服务器资源状态发生了改变)。
     
     
    简单的例子:
     https://www.cnblogs.com/zhaof/p/6910871.html
     
    Python爬虫框架:python的urllib包提供了较为完整的访问网页文档的API
    模拟浏览器行为,模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
    python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理
     
    例子:
    import urllib.request


    def getHTML(url):
    request_headers = {
    'Host':'www.vmall.com',
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    }
    req = urllib.request.Request(url,headers=request_headers)
    html = urllib.request.urlopen(req).read()
    return html


    def saveHTML(file_name, file_content):
    # 注意windows文件命名的禁用符,比如 /
    # with open(file_name.replace('/', '_') + ".html", "wb") as f:
    with open(file_name+ ".html", "wb") as f:
    # 写文件用bytes而不是str,所以要转码
    f.write(file_content)


    url = "https://www.vmall.com/list-111"

    html = getHTML(url)
    print (html)
    print("网页已爬取")

    saveHTML("baidu", html)
    print("网页已存储至本地")





    第一部分General是概要,包含请求地址,请求方式,状态码,服务器地址以及Referrer 策略。
    第二部分是应答头部,是服务器返回的。
    第三部分是请求头部,是客户端发送的

    http响应头信息:
    Content-Encoding:文档的编码信息

    http请求头信息:
    host:请求的资源服务器
    user-agent:http客户端程序信息
    accept:用户代理可请求的媒体类型
    cache-control:控制缓存开关max-age=0,告诉服务器接收一个存在时间小于0s的资源
     创建 beautifulsoup 对象:
    soup = BeautifulSoup(html,'html.parser')
    得到了标签的内容用 .string 即可获取标签内部的文字:print soup.p.string


    #!usr/bin/python
    #-*- coding:utf-8 -*-
    #createtime : 2019/8/19 22:10
    #filename : test_html.py
    #content : 爬取并保存到本地
    import urllib.request
    from bs4 import BeautifulSoup

    def getHTML(url):
    request_headers = {
    'Host':'www.vmall.com',
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    }
    req = urllib.request.Request(url,headers=request_headers)
    html = urllib.request.urlopen(req).read()
    return html


    def saveHTML(file_name, file_content):
    # 注意windows文件命名的禁用符,比如 /
    # with open(file_name.replace('/', '_') + ".html", "wb") as f:
    with open(file_name+ ".html", "wb") as f:
    # 写文件用bytes而不是str,所以要转码
    f.write(file_content)

    def getImg(html):
    soup = BeautifulSoup(html,'html.parser')
    divtag = soup.find_all("img")
    length = len(divtag)
    for i in range(length):
    print(divtag[i].attrs["src"])

    url = "https://www.vmall.com"

    html = getHTML(url)
    getImg(html)
    # print (html)
    print("网页已爬取")

    # saveHTML("huawei", html)
    print("网页已存储至本地")
     
    urllib.request的用法:

    # 导入urllib.request库

    import urllib.request

    # 向指定的url发送请求,并返回服务器响应的类文件对象

    response = urllib.request.urlopen("http://www.baidu.com/")

    # 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串

    html = response.read()

    # 打印字符串

    print(html)

    可以设置另外两个参数:

    1.data(默认为空):是伴随url提交的数据(比如post的数据),同时HTTP请求将从“GET”方式改为“POST”方式。

    2.headers(默认为空):是一个字典

    BeautifulSoup:

    安装Beautiful Soup和lxml

    lxml解析器有解析HTML和XML的功能,速度快,容错能力强

    选择元素:
    soup = BeautifulSoup(html,'html.parser')
    print(soup.a.string)
    print(soup.title)
    print(type(soup.title))
    print(soup.title.string)
    print(soup.head)

    方法选择器:
    find_all(name , attrs , recursive , text , **kwargs)
    print(soup.find_all(name='ul'))

    for ul in soup.find_all(name='ul'):
    print(ul.find_all(name='li'))
    for li in ul.find_all(name='li'):
    print(li.string)
    print(soup.find_all(text=re.compile('qq')))

    find()方法,返回的是单个元素,也就是第一个匹配的元素

    CSS选择器:
    print(soup.select('.button-top-banner-min'))

    soup.a.parent就可以获取父节点的信息
    print(soup.a.parent)
    print(soup.find('a',{'class': 'button-top-banner-min'}).parent)
    子节点
    print(soup.li.contents)

    兄弟节点

    soup.a.next_siblings 获取后面的兄弟节点
    soup.a.previous_siblings 获取前面的兄弟节点
    soup.a.next_sibling 获取下一个兄弟标签
    souo.a.previous_sinbling 获取上一个兄弟标签

    https://www.cnblogs.com/YanCJ/p/7392735.html

    django_tables2导出表:https://github.com/jieter/django-tables2/blob/master/docs/pages/export.rst

    restframe:https://github.com/fangweiren/Django-REST-framework-documentation

  • 相关阅读:
    二、编写输出“Hello World”
    实验一:JDK下载与安装、Eclipse下载与使用总结心得
    C++引用
    数组类型与sizeof与指针的引用
    电源已接通,未充电
    改变Web Browser控件IE版本
    “stdafx.h”: No such file or directory
    word2013 blog test
    Editplus配置VC++(1) 及相关注意事项
    VC++6.0在Win7以上系统上Open或Add to Project files崩溃问题 解决新办法
  • 原文地址:https://www.cnblogs.com/liurg/p/11144325.html
Copyright © 2020-2023  润新知