【无标题】

【无标题】,第1张

#提供的用于数据分析的方法和属性:
# 1、soup.tagName:返回的是文档中第一次出现的tagName对应的标签
# 2、soup.find():find('tagName')等同于soup.tagName
#               属性定位: print(soup.find('meta',description_='keywords'))
# 3、soup.find_all(‘tagName’)返回符合条件的所有标签  返回的是列表
# 4、soup.select(id、类、标签选择器)返回的是列表
#     print(soup.select('.tang > ul > li > a'))[0]
# # 层级标签  bs4不支持使用索引 因此可以在生成列表后进行索引  >标识一个层级  space(空格)标识多个层级

# 获取标签之间的文本数据
# soup.text/get_text()/string
# soup.text/soup.get_text():可以获得标签的所有文本数据
# soup.string只能获取直系标签下的文本数据
#  print(soup.find('div', class_="chose_city").text)

# 获取标签中属性值
# soup.a['属性名称']
#   print(soup.select('.chose_city a')[0]['href'])

# 需求:爬取三国演义所有章节的标题和内容
from bs4 import BeautifulSoup
import requests
if __name__=='__main__':
    # 首先对首页的页面进行提取
    url='https://www.shicimingju.com/book/sanguoyanyi.html'

    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/53'}
    response=requests.get(url=url,headers=headers).text
# 在首页中解析出章节的标题和内容
# 实例化beautifulsoup对象  将页面原码数据加载到对象中
    soup=BeautifulSoup(response,'lxml')
#     解析章节标题和章节内容
    li_list=soup.select('.book-mulu>ul>li')
    fp=open('./sanguo.html','w',encoding='utf-8')
    for li in li_list:
        title=li.a.string
        detail_url='https://www.shicimingju.com/book/sanguoyanyi.html'+li.a['href']
# 对详情页发起请求  解析出章节内容
        detail_response=requests.get(url=detail_url,headers=headers)
        detail_response_text=detail_response.text
        detail_soup=BeautifulSoup(detail_response_text,'lxml')
        content=detail_soup.find('div',class_='chapter_content').text

        fp.write(title+':'+content+'/n')
        print('over')

# xpath('xpath表达式’)最重要
# /:表示的是从根节点开始定位,表示的是一个层级   print(tree.xpath('/html/head/title'))
#//:表示的是多个层级      print(tree.xpath('/html//title'))
# //:可以表示从任意位置进行定位      print(tree.xpath('//title'))  返回的是一个列表
# 属性定位 r=tree.xpath('//div[@]   tag[@attrName='attrValue'] 属性值的写法  中括号【】  @后加属性的定位
# 索引定位:r=tree.xpath('//div[@]/p[3]')  索引是从1开始

# 如何取文本
# 1、/text():获取的是标签中直系的文本内容    r=tree.xpath('//div[@]/p[3]/text')
# 2、//text():标签中非直系的文本内容(所有文本)      r=tree.xpath('//div[@]/p[3]//text')
# 如何取属性
# 1、/@attrName   image/@src

# import requests
# from lxml import etree
# if __name__=='__main__':
#     tree=etree.parse('./restaurant.html')
#     print(tree.xpath('//title'))
#     r=tree.xpath('//div[@]/p[3]//text')
#
# # 需求:爬取58二手房中的房源信息
# import  requests
# from lxml import  etree
# if __name__=='__main__':
#     url='https://jl.58.com/ershoufang/'
# #     先获取页面原码数据
#     headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/53'}
#     response=requests.get(url=url,headers=headers)
#     response_text=response.text
# #     进行数据解析
#     tree=etree.HTML(response_text)
#     # 存储的就是li标签的数据信息
#     li_list=tree.xpath('//ul[@]/li')
#     fp=open('58.txt','w',encoding='utf-8')
#     for li in li_list:
#        title= li.xpath('./div[2]/h3/a/text()')[0]
# #         .表示当前的页面数据
# #        fp.write(title+'\n')
#        print(title)
#
import requests
from lxml import etree
import os
if __name__=='__main__':
    url='http://pic.netbian.com/4kmeinv/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/53'}

    response=requests.get(url=url,headers=headers)
    # 手动设定编码问题 解决爬虫的乱码问题  可能好用  也可能不好用
    response.encoding='utf-8'
    response_text=response.text
    tree=etree.HTML(response_text)
    # 数据解析:src的属性值   alt属性值
    li_list=tree.xpath('//div[@]//li')
    if not os.path.exists('./piclibs'):
        os.mkdir('./piclibs')

    for li in li_list:
        image_src='http://pic.netbian.com'+li.xpath('./a/img/@src')[0]
        image_name=li.xpath('./a/img/@alt')[0]+'.jpg'
        # 通用处理中文乱码的解决方案
        # image_name=image_name.encode('iso-8859-1').decode('gbk')
        print(image_name,image_src)
#   请求图片进行持久化存储
        image_response=requests.get(url=image_src,headers=headers).content
        image_path='./piclibs'
        with open('image_path','wb') as fp:
            fp.write(image_response)
            print('over')

from lxml import etree
import  requests
# 一次性将热门城市和普通城市都解析出来
if __name__=='__main__':
    url='https://www.aqistudy.cn/historydata/'
    headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/53'}
    response=requests.get(url=url,headers=headers).text
    tree=etree.HTML(response)
    # 解析到热门城市和所有城市对应的a标签
    # div/ul/li/a  热门城市a标签的层级关系
    # div/ul/div[2]/li/a 全部城市a标签的层级关系
    all_list=tree.xpath('//div/ul/li/a |//div/ul/div[2]/li/a')
    all_name=[]
    for li in all_list:
        all_list_name=li.xpath('./text()')[0]
        all_name.append(all_list_name)
    print(all_name,len(all_name))

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/569483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存