zoukankan      html  css  js  c++  java
  • 假期学习【六】Python网络爬虫2020.2.4

    今天通过Python网络爬虫视频复习了一下以前初学的网络爬虫,了解了网络爬虫的相关规范。

    案例:京东的Robots协议

    https://www.jd.com/robots.txt

    说明可以爬虫的范围

    #注释. *代表所有 /代表根目录

    robots协议

    http://www.baidu.com/robots.txt 百度

    http://news.sina.com.cn/robots.txt 新浪新闻

    http://www.qq.com/robots.txt 腾讯

    http://news.qq.com/robots.txt 腾讯新闻

    如果一个网站不设置robots协议说明所有内容都可以爬取

    网络爬虫:自动或人工识别robots.txt,再进行内容爬取

    约束性:robots协议建议但非约束性,不遵守可能存在法律风险

    爬取网页的通用代码框架

    #爬取网页的通用代码框架
    import requests
    def getHTMLText(url):
        try:
            r=requests.get(url,timeout=30)
            r.raise_for_status()
            r.encoding=r.apparent_encoding
            return r.text
        except:
            return "产生异常"
    
    if __name__=="__main__":
        url="http://www.baidu.com"
        print(getHTMLText(url))
    View Code

    京东商品页面的爬取,这段代码可以简单爬取京东一个商品页面未经过处理的信息。

    #京东商品页面爬取
    import requests
    r=requests.get('https://item.jd.com/100000287117.html')
    try:
        print(r.status_code)
        print(r.encoding)
        print(r.text[:1000])
    except:
        print("爬取失败!")
    View Code

    亚马逊商品页面的爬取,与京东类似,但增加了对headers的限制。

    #亚马逊商品页面爬取
    import requests
    url='https://www.amazon.cn/dp/B01LX4GONW/ref=Oct_DLandingS_rdp_4e4570f3'
    try:
        kv = {'user-agent': 'Mozilla/5.0'}
        r = requests.get(url, headers=kv)
        print(r.request.headers) #查看当前访问的headers
        print(r.status_code) #查看是否错误
        print(r.encoding) #查看可能编码
        r.encoding=r.apparent_encoding #将编码转换为所提取内容分析过的编码
        print(r.text) #提取字符
    except:
        print("爬取失败")
    View Code

    百度360搜索关键词,需要安全验证。

    import requests
    kv={'wd':'Python'}
    try:
        r=requests.get("http://www.baidu.com/s",params=kv)
        print(r.status_code) #查看是出错
        print(r.encoding)
        r.encoding=r.apparent_encoding
        print(r.request.url) #查看完整ur
        print(len(r.text)) #查看查询结果条目数
        print(r.text)
    except:
        print("爬取错误!")
    View Code

    爬取图片:

    import requests
    import os
    url="http://image.ngchina.com.cn/2020/0203/20200203014405762.jpg"
    root="D://pics//"
    path=root+url.split('/')[-1]
    try:
        if not os.path.exists(root):
            os.mkdir(root)
        if not os.path.exists(path):
            r = requests.get(url)
            print(r.status_code)  # 检测错误
            with open(path,'wb') as f:
                f.write(r.content)
                f.close()
                print("图片保存成功")
        else:
            print("图片已存在!")
    except:
        print("爬取出错!")
    View Code

    ip地址归属地的自助查询

    import requests
    url="http://m.ip138.com/ip.asp?ip="
    try:
        r = requests.get(url + '202.204.80.112')
        print(r.status_code)
        print(r.text[-500:])
    except:
        print("爬取失败!")
    View Code

    BeautifulSoup类的基本元素

    Tag 标签,最基本的信息组织单元,分别是<>和</>标明开头和结尾

    Name 标签的名字,<p>...</p>的名字是‘p’格式<tag>.name

    Attributes 标签的属性,字典形式组织,格式<tag>.attrs

    NavigableString 标签内非属性字符串,<>,...</>中字符串 格式<tag>.string

    Comment 标签内字符串的注释部分,一种特殊的Comment类型

    import requests
    from bs4 import BeautifulSoup
    r=requests.get("http://python123.io/ws/demo.html")
    #print(r.text)
    demo=r.text
    soup=BeautifulSoup(demo,"html.parser") #解析为Beautifulsoup可以理解的汤
    print(soup.title) #打印title
    #print(soup.prettify())
    
    #标签的内容
    tag=soup.a #返回第一个标签内容
    print(tag)
    print(type(tag))
    
    #标签的名字
    print(soup.a.name)#a标签的名字
    print(soup.a.parent.name)#a标签父亲的名字
    print(soup.a.parent.parent.name) #a标签的父亲的父亲的名字
    print(type(soup.a.name))
    
    #标签的属性
    print(tag.attrs) #a标签的属性
    print(tag.attrs['class'])#a标签class属性
    print(tag.attrs['href'])#a标签href属性的值
    print(type(tag.attrs))
    
    #标签内部内容
    print(soup.a.string)
    print(soup.p.string)
    print(type(soup.p.string))
    View Code
    import requests
    path="D:/abc.jpg"
    url="http://image.ngchina.com.cn/2020/0203/20200203014405762.jpg"
    try:
    r=requests.get(url)
    print(r.status_code)#检测错误
    with open(path,'wb') as f:
    f.write(r.content)
    except:
    print("爬取出错!")

    ------------恢复内容结束------------

  • 相关阅读:
    访问虚拟机
    w3school JavaScript 简介
    蘑菇街2016研发工程师在线编程题
    乐视2017暑期实习生笔试题(二)
    今日头条2017后端工程师实习生笔试题
    c# 读取 excel文件内容,写入txt文档
    处理字符串
    XML获取节点信息值
    SVN仓库目录结构
    sql 知识点
  • 原文地址:https://www.cnblogs.com/zlc364624/p/12261724.html
Copyright © 2011-2022 走看看