zoukankan      html  css  js  c++  java
  • 爬虫第二天

    参考博客:https://www.cnblogs.com/cyycyhcbw/articles/10442399.html

    聚焦爬虫:数据解析

    数据解析原理:

      标签定位

      获取标签中的数据

    python实现数据解析的方式:

      正则

      bs4

      xpath

      pyquery

    #使用正则进行数据解析:爬取糗事百科中的图片数据
    import requests
    import re
    from urllib import request
    import os
    if not os.path.exists('./qiutuLibs'):
        os.mkdir('./qiutuLibs')
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
    }
    url = 'https://www.qiushibaike.com/pic/'
    #使用通用爬虫对当前url对应的一整张页面源码数据进行爬取
    page_text = requests.get(url=url,headers=headers).text
    
    #数据解析:所有的图片地址
    ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
    #re.S是正则中专门用来处理换行
    img_src = re.findall(ex,page_text,re.S)
    for src in img_src:
        src = 'https:'+src
        img_name = src.split('/')[-1]
        img_path = './qiutuLibs/'+img_name
        request.urlretrieve(src,img_path)
        print(img_name,'下载成功')

    bs4解析

    • 解析原理
      • 实例化一个BeautifulSoup对象,并且将即将被解析的源码数据加载到该对象中
      • 调用BeautifulSoup对象中相关的属性和方法进行标签定位和数据提取
    • 环境的安装:
      • pip install bs4
      • pip install lxml
    • BeautifulSoup对象的实例化:
      • BeautifulSoup(fp,'lxml'):是将本地的一个html文档中的源码数据加载到该对象中
      • BeautifulSoup(page_text,'lxml'):是将从互联网上获取的页面源码数据加载到该对象中

     bs4的使用如下:

    #1.导入BeautifulSoup
    from bs4 import BeautifulSoup
    fp = open('./test.html','r',encoding='utf-8')

    #2.实例化BeautifulSoup soup
    = BeautifulSoup(fp,'lxml')
    #3标签定位 #3.1 soup.tagName:定位到的是源码中第一次出现的该标签 # print(soup.div)


    #3.2soup.find('tagName',attrName='value')属性定位 # print(soup.find('div',class_='tang'))

    #3.3 print(soup.find_all('div',class_='tang'))

    #3.4select('选择器'): 标签,类class,id,层级 选择器 # print(soup.select('#feng')) # print(soup.select('.tang > ul > li')) # print(soup.select('.tang li')) #空格表示的是多个层级,大于号表示一个层级 #4.数据提取 string text get_text # print(soup.p.string) #获取的是标签中直系的文本内容 # print(soup.p.text) #获取的是标签中所有的文本内容 # print(soup.p.get_text()) #区别 # print(soup.select('.song')[0].get_text()) #5取属性 ['attrName'] print(soup.img['src'])

    xpath解析

    • 解析原理
      • 实例化一个etree的对象,并且将页面源码数据加载到该对象中
      • 可以通过调用etree对象的xpath方法结合着不同类型的xpath表达式进行标签定位和数据提取
    • 环境安装: pip install lxml
    • etree对象的实例化:
      • etree.parse('filePath')  #本地的html路径
      • etree.HTML(page_text)  #从互联网中获取的html文档

    xpath的使用:

    #1.引入etree
    from
    lxml import etree #2.实例化etree tree = etree.parse('./test.html') #3. title = tree.xpath('/html/head/title') #从跟节点开始一层一层的寻找指定的标签 title = tree.xpath('//title') #不是从跟节点开始寻找 #4.属性定位 div = tree.xpath('//div[@class="song"]') #5.索引定位 li = tree.xpath('//div[@class="tang"]/ul/li[5]') #索引是从1开始 li = tree.xpath('//div[@class="tang"]//li[5]') #索引是从1开始 #取值 /text()直系的文本内容 //text()所有的文本内容 a = tree.xpath('//div[@class="song"]/a[1]/text()') div = tree.xpath('//div[@class="tang"]//text()') #取属性 a_href = tree.xpath('//div[@class="song"]/a[1]/@href') print(a_href[0])
  • 相关阅读:
    mojoportal学习——文章翻译之SmartCombo
    windows froms 程序打包 (转载)
    [笔记]LCD1602 Display Experiment
    [笔记] JLink V8固件烧录指导
    [笔记]NiosII之Count Binary
    [笔记]DE2115 LCD1602字符的显示
    [笔记]What is HDBaseT
    [笔记]Inrush Current Case
    [笔记]远传中继的实现
    [笔记]RunningLED Experiment
  • 原文地址:https://www.cnblogs.com/l1222514/p/11010936.html
Copyright © 2011-2022 走看看