• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    教你如何使用Python快速爬取需要的数据

    一、基础第三方库使用

    1.基本使用方法

    """例"""
    from urllib import request
    response = request.urlopen(r'http://bbs.pinggu.org/') 
    #返回状态 200证明访问成功
    print("返回状态码:  "+str(response.status))
    #读取页面信息转换文本并进行解码,如果本身是UTF-8就不要,具体看页面格式
    #搜索“charset”查看编码格式
    response.read().decode('gbk')[:100]
    


    2.Request

    使用request()来包装请求,再通过urlopen()获取页面。俗称伪装。让服务器知道我们是通过浏览器来访问的页面,有些情况可能会被直接毙掉。

    url = r'http://bbs.pinggu.org/'
    headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
               r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
               'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
               'Connection': 'keep-alive'}
    req = request.Request(url, headers=headers)
    page = request.urlopen(req).read()
    page = page.decode('gbk')
    page[:100]
    

    包含data的方法。

    import urllib.parse
    url = r'https://new-api.meiqia.com/v1/throttle/web?api_name=%2Fvisit%2Finitent_id=7276v=1534848690048'
    headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
               r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
               'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
               'Connection': 'keep-alive'}
    values={'api_name':'/visit/init','ent_id':'7276','v':'1534848690048'}
    data = urllib.parse.urlencode(values).encode(encoding='UTF8')
    req = request.Request(url, data,headers=headers)
    page = request.urlopen(req).read()
    page = page.decode('gbk')
    

    3.异常处理

    from urllib.request import Request, urlopen
    from urllib.error import URLError, HTTPError
    req = Request("//www.jb51.net /")
    try:
        response = urlopen(req)
    except HTTPError as e:
        print('服务器无法满足请求.')
        print('错误代码: ', e.code)
    except URLError as e:
        print('不能访问服务器.')
        print('原因: ', e.reason)
    else:
        print("OK!")
        print(response.read().decode("utf8"))
    

    from urllib.request import Request, urlopen
    from urllib.error import  URLError
    req = Request("//www.jb51.net /")
    try:
        response = urlopen(req)
    except URLError as e:
        if hasattr(e, '原因'):
            print('不能访问服务器.')
            print('原因: ', e.reason)
        elif hasattr(e, '代码'):
            print('服务器无法满足请求.')
            print('错误代码: ', e.code)
        else:
            print("OK!")
            print(response.read().decode("utf8"))
    


    4.HTTP认证

    import urllib.request
     
    # 私密代理授权的账户
    user = "user_name"
    # 私密代理授权的密码
    passwd = "uesr_password"
    # 代理IP地址  比如可以使用百度西刺代理随便选择即可
    proxyserver = "177.87.168.97:53281"
    # 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码
    passwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
    # 2. 添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 代理服务器、用户名、密码
    passwdmgr.add_password(None, proxyserver, user, passwd)
    # 3. 构建一个代理基础用户名/密码验证的ProxyBasicAuthHandler处理器对象,参数是创建的密码管理对象
    #   注意,这里不再使用普通ProxyHandler类了
    proxyauth_handler = urllib.request.ProxyBasicAuthHandler(passwdmgr)
    # 4. 通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler 和 proxyauth_handler
    opener = urllib.request.build_opener(proxyauth_handler)
    # 5. 构造Request 请求
    request = urllib.request.Request("http://bbs.pinggu.org/")
    # 6. 使用自定义opener发送请求
    response = opener.open(request)
    # 7. 打印响应内容
    print (response.read())
    

    5.ROBOT协议

    目标网址后加/robots.txt,例如:https://www.jd.com/robots.txt

    第一个的意思就是说对于所有的爬虫,不能爬取在/?开头的路径,也不能访问和/pop/*.html 匹配的路径。
    后面四个用户代理的爬虫不允许访问任何资源。

    所以Robots协议的基本语法如下:

    二、爬虫的网页抓取

    1.爬虫的用途

    实现浏览器的功能,通过制定的URL,直接返回用户所需要的数据。

    一般步骤:

    2.网页分析

    获取对应内容之后进行分析,其实就需要对一个文本进行处理,把你需要的内容从网页中的代码中提取出来的过程。BeautifulSoup可实现惯用的文档导航、查找、修改文档功能。如果lib文件夹下没有BeautifulSoup的使用命令行安装即可。

    pip install BeautifulSoup

    3.数据提取

    # 想要抓取我们需要的东西需要进行定位,寻找到标志
    from bs4 import BeautifulSoup
    soup = BeautifulSoup('meta content="all" name="robots" />',"html.parser")
    tag=soup.meta
    
    # tag的类别
    type(tag)
    >>> bs4.element.Tag
    
    # tag的name属性
    tag.name
    >>> 'meta'
    
    # attributes属性
    tag.attrs
    >>> {'content': 'all', 'name': 'robots'}
    
    # BeautifulSoup属性
    type(soup)
    >>> bs4.BeautifulSoup
    soup.name
    >>> '[document]'
    
    # 字符串的提取
    markup='b>a href="http://house.people.com.cn/" rel="external nofollow"  target="_blank">房产/a>/b>'
    soup=BeautifulSoup(markup,"lxml")
    text=soup.b.string
    text
    >>> '房产'
    type(text)
    >>> bs4.element.NavigableString
    

    4.BeautifulSoup 应用举例

    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    

    #通过页面解析得到结构数据进行处理
    from bs4 import BeautifulSoup
    soup=BeautifulSoup(html.text,"lxml")
    
    #定位
    lptable = soup.find('table',width='780')
    
    # 解析
    for i in lptable.find_all("td",width="680"):    
        title = i.b.strong.a.text
        href = "http://www.cwestc.com"+i.find('a')['href']
    #     href = i.find('a')['href']
        date = href.split("/")[4]
        print (title,href,date)
    


    4.Xpath 应用举例

    XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

    四种标签的使用方法

    from lxml import etree
    
    html="""
    !DOCTYPE html>
    html>
    head lang="en">
        title>test/title>
        meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    /head>
    body>
    div id="content">
        ul id="ul">
            li>NO.1/li>
            li>NO.2/li>
            li>NO.3/li>
        /ul>
        ul id="ul2">
            li>one/li>
            li>two/li>
        /ul>
    /div>
    div id="url">
        a href="http://www.crossgate.com" rel="external nofollow"  title="crossgate">crossgate/a>
        a href="http://www.pinggu.org" rel="external nofollow"  title="pinggu">pinggu/a>
    /div>
    /body>
    /html>
    """
    
    #这里使用id属性来定位哪个div和ul被匹配 使用text()获取文本内容
    selector=etree.HTML(html)
    content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()') 
    for i in content:
        print (i)
    

    #这里使用//从全文中定位符合条件的a标签,使用“@标签属性”获取a便签的href属性值
    con=selector.xpath('//a/@href') 
    for i in con:
        print (i)

    #使用绝对路径 #使用相对路径定位 两者效果是一样的
    con=selector.xpath('/html/body/div/a/@title') 
    print (len(con))
    print (con[0],con[1])

    三、动态网页和静态网页的区分

    来源百度:

    静态网页的基本概述

    静态网页的网址形式通常是以.htm、.html、.shtml、.xml等为后后缀的。静态网页,一般来说是最简单的HTML网页,服务器端和客户端是一样的,而且没有脚本和小程序,所以它不能动。在HTML格式的网页上,也可以出现各种动态的效果,如.GIF格式的动画、FLASH、滚动字母等,这些“动态效果”只是视觉上的,与下面将要介绍的动态网页是不同的概念。

    静态网页的特点

    动态网页的基本概述

    动态网页是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”。动态网页与网页上的各种动画、滚动字幕等视觉上的“动态效果”没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页.动态网站也可以采用静动结合的原则,适合采用动态网页的地方用动态网页,如果必要使用静态网页,则可以考虑用静态网页的方法来实现,在同一个网站上,动态网页内容和静态网页内容同时存在也是很常见的事情。

    动态网页应该具有以下几点特色:

    总结来说:页面内容变了网址也会跟着变基本都是静态网页,反之是动态网页。

    四、动态网页和静态网页的抓取

    1.静态网页

    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=1"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text[1900:2000]
    

    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text[1900:2000]
    

    总结:上面2个url差别在最后一个数字,在原网页上每点下一页网址和内容同时变化,我们判断:该网页为静态网页。

    2.动态网页

    import requests
    from bs4 import BeautifulSoup
    url = "http://news.cqcoal.com/blank/nl.jsp?tid=238"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text
    


    抓取该网页看不到任何的信息证明是动态网页,正确抓取方法如下。

    import urllib
    import urllib.request
    import requests
    
    url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
    post_param = {'pageNum':'1',\
    
                  'pageSize':'20',\
    
                  'jsonStr':'{"typeid":"238"}'}
    return_data = requests.post(url,data =post_param)
    content=return_data.text
    content
    

    到此这篇关于教你如何使用Python快速爬取需要的数据的文章就介绍到这了,更多相关Python爬取数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python爬取豆瓣电影TOP250数据
    • python爬取链家二手房的数据
    • Python手拉手教你爬取贝壳房源数据的实战教程
    • Python数据分析之Python和Selenium爬取BOSS直聘岗位
    • python爬虫之爬取谷歌趋势数据
    • python selenium实现智联招聘数据爬取
    • python爬虫之教你如何爬取地理数据
    • Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
    • Python爬取腾讯疫情实时数据并存储到mysql数据库的示例代码
    • Python爬虫之自动爬取某车之家各车销售数据
    上一篇:Python使用scipy.fft进行大学经典的傅立叶变换
    下一篇:浅谈Pytorch 定义的网络结构层能否重复使用
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    教你如何使用Python快速爬取需要的数据 教你,如何,使用,Python,快速,