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])
  • 相关阅读:
    hdu 5646 DZY Loves Partition
    bzoj 1001 狼抓兔子 平面图最小割
    poj 1815 Friendship 最小割 拆点 输出字典序
    spoj 1693 Coconuts 最小割 二者取其一式
    hdu 5643 King's Game 约瑟夫环变形
    约瑟夫环问题
    hdu 5642 King's Order
    CodeForces 631C Report
    1039: C语言程序设计教程(第三版)课后习题9.4
    1043: C语言程序设计教程(第三版)课后习题10.1
  • 原文地址:https://www.cnblogs.com/l1222514/p/11010936.html
Copyright © 2011-2022 走看看