zoukankan      html  css  js  c++  java
  • python-基于bs4的聚焦爬虫学习

        学习了基于bs4聚焦爬虫:bs4比较局限只能是python使用。个人感觉不是很好使用。

       bs4数据解析原理:1、实例化一个beautifulSoup对象,并且将页面源码加载到该对象中
               2、通过beautifulSoup对象中的相关属性或者方法进行标签定位和数据提取

      下面是我的测试代码和BeautifulSoup对象的一些常用方法。

        

    if __name__ == '__main__':
        fp = open('./guge.html', 'r', encoding='utf-8')
        soup = BeautifulSoup(fp, 'lxml')
        # 第一次所出现的标签 soup.tagname  soup.a相当于soup.find('a')
        # print(soup.a)
        # soup.find('a', class_='song')的属性定位
    
        # soup.findAll()返回值是一个列表,里面的内容是所有要查找的所有标签
        # print(soup.findAll('a'))
    
        # soup.select('某种选择器id,class等') 选择器 返回值是一个列表
        # soup.select也可以用于层级定位 >表示一个层级 空格表示多个层级
        # print(soup.select('ul > li > a'))
        # print(soup.select('ul a'))
    
        # 获取标签内容.text/get_text() 获取一个标签下的所有内容,string 该标签下的内容
        # print(soup.find('ul').string)
    
        # 标签中的属性值
        # print(soup.a['href'])

      这是我做的一个基于bs4爬取三国演义小说:

      

    # 爬取三国演义所有的标题和章节内容
    import requests
    from bs4 import BeautifulSoup
    if __name__ == '__main__':
        url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'
        }
        resp = requests.get(url=url,headers=headers)
        resp.encoding = 'utf-8'
        nameobj = resp.text
        soup = BeautifulSoup(nameobj,'lxml')
        # print(soup.select('.book-mulu a'))
        # 选出来的所有a标签列表
        zhang_lable = soup.select('.book-mulu a')
        # print(zhang_lable)
    
        fp = open('D:StudyPythonscrapysanguo.html','w',encoding='utf-8')
        for i in zhang_lable:
            # 获取章节名
            name = i.text
            # 获取章节内容地址
            url_href = 'https://www.shicimingju.com'+i['href']
            resp1 = requests.get(url=url_href,headers=headers)
            resp1.encoding = 'utf-8'
            text = resp1.text
            soup_neirong = BeautifulSoup(text,'lxml')
            # print(soup_neirong.find('div',class_='chapter_content').get_text())
            neirong = soup_neirong.find('div',class_='chapter_content').get_text()
            fp.write(name+':'+neirong+'
    ')
            print(name+'爬取成功!')
        fp.close()
        print('三国演义爬取完成')

     


      

  • 相关阅读:
    lists 函数整理
    orddict 练习
    github 的使用
    wxListCtrl 例子 二
    Erlang eunit
    Erlang 中 Tuple 使用 以及 List 模块意外
    Erlang Json
    模块和包
    Mysql作为zabbix数据库ibdata1文件太高解决
    用户管理和数据库安全
  • 原文地址:https://www.cnblogs.com/moxihuishou/p/13954593.html
Copyright © 2011-2022 走看看