ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

关于Python网络爬虫与信息提取,除了提取最好大学排名字段,还可以批量下载图片(同步学校名称)

2021-02-27 15:58:44  阅读:231  来源: 互联网

标签:函数 schoolname Python 标签 信息提取 学校名称 url1 tds path


这两天学习了中国大学:https://www.icourse163.org,实例6 中国大学排名,于是操作了下,由于嵩天老师提供的网页目前已经发生变化,给一起学习的小伙伴带来些困扰,按照老师教授的知识,我突发奇想,可不可以用所学知识将实例中“最好大学”最新网页上的图片爬取下来呢?答案是可以的,以下为我的实践输出,还希望各位大佬互相学习。如有不明白的地方,可留言私信,

#将网站上的图片资源获取下来(单个网页上所有图片获取下来,并修改文件名称)
#
import os
import requests
import bs4
from bs4 import BeautifulSoup
import re

#获取目标文本【爬取网页通用代码框架】,所需参数url为主函数提供
def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "获取网页文本失败"

#自定义函数,设定传入参数,参数从getHTMLText(url)方法运算后的结果赋予的变量-demo,解析网页并遍历所需标签,提取所需内容后返回给主函数变量供其他模块函数调用
def jiexi(ulist,demo,url1,schoolname):   
    
    soup = BeautifulSoup(demo,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):   #这个地方是判断是否为Tag标签,如果不是则舍弃
            tds = tr('td')   #将td标签内容加入tds列表中,以上为遍历<tbody>儿子标签内容,并赋予一个变量tds
            for tag in tds[1].find_all(re.compile('img')):  #正则表达式、find_all函数、for循环一次,匹配变量tds[1]中所有'img'标签,一旦匹配成功,如下:
                url1.append(tag.get('src'))               #则使用主函数main()中传入的空列表[]url1和append的函数;get()函数用于解析'img'标签,提取'src'后的链接内容
            for schnam in tds[1].find_all(re.compile('a')): #正则表达式、find_all函数、匹配变量tds[1]中所有'a'标签,一旦匹配成功,如下:
                schoolname.append(schnam.string)            #则使用主函数main()中传入的空列表[]schoolname和append的函数 ;标签.string 用于提取标签内非属性字符串
                
#自定义函数,设定传入参数:url1,schoolname,其参数从jiexi()函数中运算得来,再次运算,该函数也引用了【网络图片存储通用代码框架】           
def download(url1,schoolname):
    root = "D://pics2//"
    path = ""
    for i in url1:
        #ss = ''.join(i)   #由于url1中的元素为列表类型,需转换成字符成类型方可进一步操作,其实不需要,只要将url1.append([tag.get('src')]) 中[]去掉即可,pass
        path = root + schoolname[url1.index(i)*2] + ".png"    #文件路径、名称
        #print(path) 调试用,pass
        try:
            if not os.path.exists(root):
                os.mkdir(root)
            if not os.path.exists(path):
                r = requests.get(i)
                with open(path,'wb') as f:
                    f.write(r.content)
                    f.close()
                    print('文件保存成功')
            else:
                print('文件已存在')
        except:
            print('爬取失败')
          
def main():
    url = 'https://www.shanghairanking.cn/rankings/bcur/2020'
    demo = getHTMLText(url)
    ulist = []
    url1 = [] 
    schoolname = []
    jiexi(ulist,demo,url1,schoolname)
    download(url1,schoolname)

main()

最终效果:
每个文件名称按照对应图片一并写入,方法详见:28、29和31行

标签:函数,schoolname,Python,标签,信息提取,学校名称,url1,tds,path
来源: https://blog.csdn.net/quweitianshi/article/details/114177427

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有