• 形象理解爬虫的四步


    目标:爬取网站上的书名和简介
     
    以下为代码:
     
    import requests # 调用requests库
    from bs4 import BeautifulSoup # 调用BeautifulSoup库
    
    res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html') # 返回一个response对象,赋值给res
     
    爬虫有四步:获取数据、解析数据、提取数据、保存数据
     
    这一步就是获取数据,利用requests库中的get函数,在给定的网址中,获取数据,得到的东西是一个封装的response对象,对于对象,会有各种属性方法,我们要通过方法(打个比方就是对象是一个黑盒,方法是各种钥匙,不同的钥匙打开不同的门,不同的门里面包含着不同的数据)
     
    html = res.text# 把res的内容以字符串的形式返回
    这一步,就是运用了res对象中text方法,将对象中包含字符串的门,打开,使之将内容吐出来这里的 html 的类型是 string 字符串,对应到这里,通过打印html,里面是包含着我们需要的内容的网页代码,所以这一步只是粗糙的拿到了我们的数据。
     
    soup = BeautifulSoup( html,'html.parser') # 把网页解析为BeautifulSoup对象
     
    获取数据后,下一步就是解析数据了,我们引入了一个用来解析网页内容的模块,通过解析后,将解析的数据赋值给了soup,打印soup 的类型,<class 'bs4.BeautifulSoup'>打印soup 内容,可以发现和html的区别:
    区别:html中的代码部分的格式,被清除了。这种格式体现在排版上。但是内容依然是:我们需要的内容+网页代码,所以下一步我们就需要将网页代码部分去掉。
     
    items = soup.find_all(class_='books') # 通过定位标签和属性提取我们想要的数据
     
    实际上,获取数据的过程就是一点点缩小范围,直到拿到需要的数据为止。所以这里,我们需要精确定位一下,通过查看网页代码,我们发现,我们需要的内容,其实是在 class=book 的标签中,所以我们缩小一下范围拿到的数据赋值给 items ,items的类型 <class 'bs4.element.ResultSet'>,我们可以把它当做一个列表 list 来看待内容当然是class= book 中的文字+代码了
     
    for item in items:
    print('想找的数据都包含在这里了:
    ',item) # 打印item
    print(type(item))
     
    既然是列表,我们要想获得里面的内容就需要  【遍历】 一下子了,【遍历】完后,我们发现:内容还是那些内容,只不过,item 的【格式】<class 'bs4.element.Tag'>既然是个【对象】,我们就知道应该怎么办了

    首先,tag对象依旧可以使用find继续缩小范围式的查找

    for item in items:
        kind = item.find('h2') # 在列表中的每个元素里,匹配标签<h2>提取出数据
        title = item.find(class_='title') #在列表中的每个元素里,匹配属性                
        class_='title'提取出数据
        brief = item.find(class_='info') #在列表中的每个元素里,匹配属性        
        class_='info'提取出数据
        print(kind,'
    ',title,'
    ',brief) # 打印提取出的数据
        print(type(kind),type(title),type(brief)) # 打印提取出的数据类型        

    实际上这时拿到的kind、title、brief 依然包含着网页代码,他们各自的类型依然是tag,所以我们可以继续使用以下方法

    import requests # 调用requests库from bs4 import BeautifulSoup # 调用BeautifulSoup库
    res =requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')# 返回一个response对象,赋值给res
    html=res.text
    # 把res解析为字符串
    soup = BeautifulSoup( html,'html.parser')# 把网页解析为BeautifulSoup对象
    items = soup.find_all(class_='books') # 通过匹配属性class='books'提取出我们想要的元素for item in items: # 遍历列表items
    kind = item.find('h2') # 在列表中的每个元素里,匹配标签<h2>提取出数据
    title = item.find(class_='title') # 在列表中的每个元素里,匹配属性class_='title'提取出数据
    brief = item.find(class_='info') # 在列表中的每个元素里,匹配属性class_='info'提取出数据
    print(kind.text,'
    ',title.text,'
    ',title['href'],'
    ',brief.text) # 打印书籍的类型、名字、链接和简介的文字

     

  • 相关阅读:
    Android 3D滑动菜单完全解析,实现推拉门式的立体特效
    2013年9月25日参加耐特菲姆(北京)玉米滴灌培训小结
    日积月累:ProguardGui进行jar包代码混淆
    CSS3之渐变Gradient
    poj 3182 The Grove
    qrcodeJS生成二维码
    样式优先级
    git流程及操作
    js data日期初始化的5种方法 [转]
    转 jQuery中的$.extend方法来扩展JSON对象
  • 原文地址:https://www.cnblogs.com/waterr/p/14141632.html
Copyright © 2020-2023  润新知