从网页爬取文本信息:
eg:从http://computer.swu.edu.cn/s/computer/kxyj2xsky/中爬取讲座信息(讲座时间和讲座名称)
注:如果要爬取的内容是多页的话,网址一定要从第二页开始,因为有的首页和其他页的网址有些区别
代码
import pymysql import requests #需要导入模块 db = pymysql.connect(\'localhost\', \'root\', \'*********\', \'mysql\')#第三个是数据库密码,第四个是数据库名称 print("数据库连接成功!") print("---------------------------------------------------") r = requests.get("https://python123.io/ws/demo.html")#获取网页源代码 import re def get_text(url):#函数 r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text def parse_html(url, list): demo = get_text(url) # 将正则表达式编译成正则表达式对象,方便复用该正则表达式 # ".*?" :匹配任意字符串 # [\u4e00-\u9fa5] :匹配中文 # (\d{4}-\d{2}-\d{2}) : 匹配日期 #计信院前沿学术报告(2019.7.1)</a></li>\[(\d{4}-\d{2}-\d{2})\] patern = re.compile(\'<li><span\sclass="fr">\[(\d{4}-\d{2}-\d{2})\]</span>.*? (.*?)</a></li>\', re.S) results = re.findall(patern, demo) for result in results: list.append(result)#向列表添加对象 return list url = \'http://computer.swu.edu.cn/s/computer/kxyj2xsky/index.html\' list = [] for i in range(2,5): url = \'http://computer.swu.edu.cn/s/computer/kxyj2xsky/index_\'+str(i) + \'.html\' list = parse_html(url, list) count = 0 for i in list: count = count + 1 print(i) print("一共有"+str(count)+"条数据!")
输出
数据库连接成功! --------------------------------------------------- (\'2018-11-20\', \'计信院前沿学术报告(2018.11-23)\') (\'2018-11-19\', \'计信院前沿学术报告(2018.11-20)\') (\'2018-11-15\', \'计信院前沿学术报告(2018.11-22)\') (\'2018-11-12\', \'计信院前沿学术报告(2018.11-14)\') (\'2018-11-02\', \'第三届全国形式化方法与应用会议暨形式化专委年会(FMAC 2018)即将开幕\') (\'2018-11-01\', \'计信院前沿学术报告(2018.11-06)\') (\'2018-10-25\', \'计信院前沿学术报告(2018.10-31)\') (\'2018-10-17\', \'计信院前沿学术报告(2018.10-19)\') (\'2018-10-10\', \'计信院前沿学术报告(2018.10-17)\') (\'2018-09-26\', \'计信院前沿学术报告(2018.09-29)\') (\'2018-09-12\', \'计信院前沿学术报告(2018.09-18)\') (\'2018-09-03\', \'计信院前沿学术报告(2018.09-04)\') (\'2018-07-05\', \'计信院前沿学术报告(2018.07-05)\') (\'2018-06-28\', \'计信院前沿学术报告(2018.07-02)\') (\'2018-06-20\', \'第7届华人学者知识表示与推理学术研讨会\') (\'2018-06-19\', \'计信院前沿学术报告(2018-06-20)\') (\'2018-05-15\', \'计信院前沿学术报告(2018-05-16)\') (\'2018-05-07\', \'计信院前沿学术报告(2018-05-10)\') (\'2018-05-02\', \'西南大学第三届青年学者含弘科技论坛 计算机与信息科学学院分论坛 学术报告\') (\'2018-04-16\', \'计信院前沿学术报告(2018-04-23)\') (\'2018-04-09\', \'计信院前沿学术报告(2018-04-16)\') (\'2018-04-04\', \'第四届可信软件系统工程(国际)春季学校Spring School on Engineering Trustworthy Software Systems\') (\'2018-04-02\', \'计信院前沿学术报告(2018-04-08)\') (\'2018-04-02\', \'计信院前沿学术报告(2018-04-02)\') (\'2018-03-27\', \'计信院前沿学术报告(2018-03-30)\') (\'2018-01-09\', \'理论计算机科学2018寒假讲习班\') (\'2018-01-09\', \'计信院前沿学术报告(2018-01-11)\') (\'2018-01-03\', \'计信院前沿学术报告(2018-01-05)\') (\'2017-12-27\', \'出国访学(留学)经验交流\') (\'2017-12-27\', \'计信院前沿学术报告(2017-12-28)\') (\'2017-12-25\', \'计信院前沿学术报告(2017-12-28)\') (\'2017-12-18\', \'出国访学(留学)经验交流\') (\'2017-12-18\', \'西南大学第二届青年学者含弘科技论坛 计算机与信息科学学院分论坛 学术报告(二)\') (\'2017-12-18\', \'西南大学第二届青年学者含弘科技论坛 计算机与信息科学学院分论坛 学术报告(一)\') (\'2017-12-15\', \'计信院前沿学术报告(2017-12-28)\') (\'2017-12-15\', \'出国访学(留学)经验交流\') (\'2017-12-11\', \'计信院前沿学术报告(2017-12-13)\') (\'2017-11-28\', \'计信院前沿学术报告(2017-11-28)\') (\'2017-11-22\', \'Third Joint Research Workshop\') (\'2017-11-06\', \'计信院前沿学术报告(2017-11-11)\') (\'2017-11-06\', \'计信院前沿学术报告(2017-11-10)\') (\'2017-11-06\', \'计信院前沿学术报告(2017-11-09)\') (\'2017-10-29\', \'计信院前沿学术报告(2017-10-30)\') (\'2017-10-25\', \'计信院前沿学术报告(2017-10-31)\') (\'2017-10-19\', \'计信院前沿学术报告(2017-10-23)\') (\'2017-10-17\', \'卑尔根-重庆网络化系统暑期学校\') (\'2017-10-12\', \'首届“西南大学重要学术成果”候选成果系列报告\') (\'2017-09-18\', \'出国访学(留学)经验交流\') (\'2017-09-14\', \'计信院前沿学术报告2017-09-15\') (\'2017-09-06\', \'出国访学(留学)经验交流\') (\'2017-07-05\', \'出国访学(留学)经验交流\') (\'2017-06-21\', \'计信院前沿学术报告(2017-06-27)\') (\'2017-06-21\', \'计信院前沿学术报告(2017-06-26)\') (\'2017-06-12\', \'计信院出国访学(留学)经验交流\') (\'2017-05-27\', \'计信院前沿学术报告(2017-06-02)\') (\'2017-05-24\', \'计信院学术研讨会(2017-05-28)\') (\'2017-05-24\', \'计信院前沿学术报告(2017-05-26)\') (\'2017-05-03\', \'西南大学青年学者含弘科技论坛\') (\'2017-04-13\', \'可信软件系统工程(国际)春季学校\') (\'2017-04-10\', \'西南大学计信院前沿学术报告\') (\'2017-03-31\', \'西南大学计信院前沿学术报告\') (\'2017-03-31\', \'西南大学教师参加国际学术会议专题报告会\') (\'2017-03-29\', \'西南大学计信院前沿学术报告\') (\'2017-03-29\', \'西南大学计信院前沿学术报告\') (\'2017-03-29\', \'西南大学计信院前沿学术报告\') (\'2017-03-28\', \'出国访学(留学)经验交流\') (\'2017-03-16\', \'出国访学(留学)经验交流\') (\'2017-03-15\', \'出国访学(留学)经验交流\') (\'2017-01-10\', \'西南大学计信院前沿学术报告\') (\'2017-01-05\', \'学术讲座\') (\'2017-01-04\', \'西南大学计信院前沿学术报告\') (\'2016-12-20\', \'理论计算机科学与形式化方法研讨会\') (\'2016-12-20\', \'西南大学计信院前沿学术报告\') (\'2016-12-14\', \'西南大学计信院前沿学术报告\') (\'2016-12-12\', \'西南大学计信院前沿学术报告\') 一共有75条数据! Process finished with exit code 0
从网页中爬取图片
eg:从https://maoyan.com/board/4?offset=10中爬取图片,存到位置C:\Users\22725\Desktop\temp
format 格式控制函数 foramt函数更常见的用法其实是str.format()
示例:
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序 \'hello world\' >>> "{0} {1}".format("hello", "world") # 设置指定位置 \'hello world\' >>> "{1} {0} {1}".format("hello", "world") # 设置指定位置 \'world hello world\'
代码:
import pymysql import requests from hashlib import md5 import re import os def get_text(url): r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text def parse_html(url, list): demo = get_text(url) # 将正则表达式编译成正则表达式对象,方便复用该正则表达式 # ".*?" :匹配任意字符串 # [\u4e00-\u9fa5] :匹配中文 # (\d{4}-\d{2}-\d{2}) : 匹配日期 patern = re.compile(\'img\sdata-src="(.*?)"\salt\', re.S) results = re.findall(patern, demo) for result in results: list.append(result) return list list = [] for i in range(0,2):#左闭右开区间[0,2) url = \'https://maoyan.com/board/4?offset=\'+str(10*i) list = parse_html(url, list) count = 0 for i in list: count = count + 1 print(i)#输出图片链接 print("一共有"+str(count)+"条数据!") def download_image(url):#保存图片链接 r = requests.get(url) r.raise_for_status() save_image(r.content) def save_image(content):#下载图片 file_path = \'{0}/{1}.{2}\'.format(\'C:/Users/22725/Desktop/temp\', md5(content).hexdigest(), \'jpg\')#注意斜杠是/ #format(\'文件储存地址\',哈希算法随机生成子文件名称,\'文件格式\') if not os.path.exists(file_path):#os.path.exists(file_path)判断文件是否存在,存在返回1,不存在返回0 with open(file_path, \'wb\') as f: f.write(content) f.close() for i in list: download_image(i) print("下载成功")
输出:
C:\Users\22725\PycharmProjects\A\venv\Scripts\python.exe C:/Users/22725/.PyCharmCE2019.1/config/scratches/scratch.py https://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/283292171619cdfd5b240c8fd093f1eb255670.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/289f98ceaa8a0ae737d3dc01cd05ab052213631.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/6bea9af4524dfbd0b668eaa7e187c3df767253.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/b607fba7513e7f15eab170aac1e1400d878112.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/da64660f82b98cdc1b8a3804e69609e041108.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/46c29a8b8d8424bdda7715e6fd779c66235684.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/223c3e186db3ab4ea3bb14508c709400427933.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/ba1ed511668402605ed369350ab779d6319397.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/b0d986a8bf89278afbb19f6abaef70f31206570.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/18e3191039d5e71562477659301f04aa61905.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/14a7b337e8063e3ce05a5993ed80176b74208.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/6bc004d57358ee6875faa5e9a1239140128550.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/ae7245920d95c03765fe1615f3a1fe3865785.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/6a964e9cee699267053bd6a4bf6f2671195394.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/43d259ecbcd53e8bbe902632772281d6327525.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/2bbaa395c825920fac397706369746e4300686.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/ad974d3527879f00be2eec29135118163728582.jpg@160w_220h_1e_1c https://p0.meituan.net/movie/932bdfbef5be3543e6b136246aeb99b8123736.jpg@160w_220h_1e_1c https://p1.meituan.net/movie/aacb9ed2a6601bfe515ef0970add1715623792.jpg@160w_220h_1e_1c 一共有20条数据! 下载成功 Process finished with exit code 0