zoukankan      html  css  js  c++  java
  • 八月份课堂--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

  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/liurg/p/11144325.html
Copyright © 2011-2022 走看看