python爬取网页文本、图片

蔚落 2021-12-10 07:37 546阅读 0赞

从网页爬取文本信息:

eg:从http://computer.swu.edu.cn/s/computer/kxyj2xsky/中爬取讲座信息(讲座时间和讲座名称)

注:如果要爬取的内容是多页的话,网址一定要从第二页开始,因为有的首页和其他页的网址有些区别

代码

  1. import pymysql
  2. import requests
  3. #需要导入模块
  4. db = pymysql.connect('localhost', 'root', '2272594305', 'mysql')#第三个是数据库密码,第四个是数据库名称
  5. print("数据库连接成功!")
  6. print("---------------------------------------------------")
  7. r = requests.get("https://python123.io/ws/demo.html")#获取网页源代码
  8. import re
  9. def get_text(url):#函数
  10. r = requests.get(url)
  11. r.raise_for_status()
  12. r.encoding = r.apparent_encoding
  13. return r.text
  14. def parse_html(url, list):
  15. demo = get_text(url)
  16. # 将正则表达式编译成正则表达式对象,方便复用该正则表达式
  17. # ".*?" :匹配任意字符串
  18. # [\u4e00-\u9fa5] :匹配中文
  19. # (\d{
  20. 4}-\d{
  21. 2}-\d{
  22. 2}) : 匹配日期
  23. #计信院前沿学术报告(2019.7.1)</a></li>\[(\d{
  24. 4}-\d{
  25. 2}-\d{
  26. 2})\]
  27. patern = re.compile('<li><span\sclass="fr">\[(\d{4}-\d{2}-\d{2})\]</span>.*? (.*?)</a></li>', re.S)
  28. results = re.findall(patern, demo)
  29. for result in results:
  30. list.append(result)#向列表添加对象
  31. return list
  32. url = 'http://computer.swu.edu.cn/s/computer/kxyj2xsky/index.html'
  33. list = []
  34. for i in range(2,5):
  35. url = 'http://computer.swu.edu.cn/s/computer/kxyj2xsky/index_'+str(i) + '.html'
  36. list = parse_html(url, list)
  37. count = 0
  38. for i in list:
  39. count = count + 1
  40. print(i)
  41. print("一共有"+str(count)+"条数据!")

输出

ContractedBlock.gif ExpandedBlockStart.gif

  1. 数据库连接成功!
  2. ---------------------------------------------------
  3. ('2018-11-20', '计信院前沿学术报告(2018.11-23)')
  4. ('2018-11-19', '计信院前沿学术报告(2018.11-20)')
  5. ('2018-11-15', '计信院前沿学术报告(2018.11-22)')
  6. ('2018-11-12', '计信院前沿学术报告(2018.11-14)')
  7. ('2018-11-02', '第三届全国形式化方法与应用会议暨形式化专委年会(FMAC 2018)即将开幕')
  8. ('2018-11-01', '计信院前沿学术报告(2018.11-06)')
  9. ('2018-10-25', '计信院前沿学术报告(2018.10-31)')
  10. ('2018-10-17', '计信院前沿学术报告(2018.10-19)')
  11. ('2018-10-10', '计信院前沿学术报告(2018.10-17)')
  12. ('2018-09-26', '计信院前沿学术报告(2018.09-29)')
  13. ('2018-09-12', '计信院前沿学术报告(2018.09-18)')
  14. ('2018-09-03', '计信院前沿学术报告(2018.09-04)')
  15. ('2018-07-05', '计信院前沿学术报告(2018.07-05)')
  16. ('2018-06-28', '计信院前沿学术报告(2018.07-02)')
  17. ('2018-06-20', '第7届华人学者知识表示与推理学术研讨会')
  18. ('2018-06-19', '计信院前沿学术报告(2018-06-20)')
  19. ('2018-05-15', '计信院前沿学术报告(2018-05-16)')
  20. ('2018-05-07', '计信院前沿学术报告(2018-05-10)')
  21. ('2018-05-02', '西南大学第三届青年学者含弘科技论坛 计算机与信息科学学院分论坛 学术报告')
  22. ('2018-04-16', '计信院前沿学术报告(2018-04-23)')
  23. ('2018-04-09', '计信院前沿学术报告(2018-04-16)')
  24. ('2018-04-04', '第四届可信软件系统工程(国际)春季学校Spring School on Engineering Trustworthy Software Systems')
  25. ('2018-04-02', '计信院前沿学术报告(2018-04-08)')
  26. ('2018-04-02', '计信院前沿学术报告(2018-04-02)')
  27. ('2018-03-27', '计信院前沿学术报告(2018-03-30)')
  28. ('2018-01-09', '理论计算机科学2018寒假讲习班')
  29. ('2018-01-09', '计信院前沿学术报告(2018-01-11)')
  30. ('2018-01-03', '计信院前沿学术报告(2018-01-05)')
  31. ('2017-12-27', '出国访学(留学)经验交流')
  32. ('2017-12-27', '计信院前沿学术报告(2017-12-28)')
  33. ('2017-12-25', '计信院前沿学术报告(2017-12-28)')
  34. ('2017-12-18', '出国访学(留学)经验交流')
  35. ('2017-12-18', '西南大学第二届青年学者含弘科技论坛 计算机与信息科学学院分论坛 学术报告(二)')
  36. ('2017-12-18', '西南大学第二届青年学者含弘科技论坛 计算机与信息科学学院分论坛 学术报告(一)')
  37. ('2017-12-15', '计信院前沿学术报告(2017-12-28)')
  38. ('2017-12-15', '出国访学(留学)经验交流')
  39. ('2017-12-11', '计信院前沿学术报告(2017-12-13)')
  40. ('2017-11-28', '计信院前沿学术报告(2017-11-28)')
  41. ('2017-11-22', 'Third Joint Research Workshop')
  42. ('2017-11-06', '计信院前沿学术报告(2017-11-11)')
  43. ('2017-11-06', '计信院前沿学术报告(2017-11-10)')
  44. ('2017-11-06', '计信院前沿学术报告(2017-11-09)')
  45. ('2017-10-29', '计信院前沿学术报告(2017-10-30)')
  46. ('2017-10-25', '计信院前沿学术报告(2017-10-31)')
  47. ('2017-10-19', '计信院前沿学术报告(2017-10-23)')
  48. ('2017-10-17', '卑尔根-重庆网络化系统暑期学校')
  49. ('2017-10-12', '首届“西南大学重要学术成果”候选成果系列报告')
  50. ('2017-09-18', '出国访学(留学)经验交流')
  51. ('2017-09-14', '计信院前沿学术报告2017-09-15')
  52. ('2017-09-06', '出国访学(留学)经验交流')
  53. ('2017-07-05', '出国访学(留学)经验交流')
  54. ('2017-06-21', '计信院前沿学术报告(2017-06-27)')
  55. ('2017-06-21', '计信院前沿学术报告(2017-06-26)')
  56. ('2017-06-12', '计信院出国访学(留学)经验交流')
  57. ('2017-05-27', '计信院前沿学术报告(2017-06-02)')
  58. ('2017-05-24', '计信院学术研讨会(2017-05-28)')
  59. ('2017-05-24', '计信院前沿学术报告(2017-05-26)')
  60. ('2017-05-03', '西南大学青年学者含弘科技论坛')
  61. ('2017-04-13', '可信软件系统工程(国际)春季学校')
  62. ('2017-04-10', '西南大学计信院前沿学术报告')
  63. ('2017-03-31', '西南大学计信院前沿学术报告')
  64. ('2017-03-31', '西南大学教师参加国际学术会议专题报告会')
  65. ('2017-03-29', '西南大学计信院前沿学术报告')
  66. ('2017-03-29', '西南大学计信院前沿学术报告')
  67. ('2017-03-29', '西南大学计信院前沿学术报告')
  68. ('2017-03-28', '出国访学(留学)经验交流')
  69. ('2017-03-16', '出国访学(留学)经验交流')
  70. ('2017-03-15', '出国访学(留学)经验交流')
  71. ('2017-01-10', '西南大学计信院前沿学术报告')
  72. ('2017-01-05', '学术讲座')
  73. ('2017-01-04', '西南大学计信院前沿学术报告')
  74. ('2016-12-20', '理论计算机科学与形式化方法研讨会')
  75. ('2016-12-20', '西南大学计信院前沿学术报告')
  76. ('2016-12-14', '西南大学计信院前沿学术报告')
  77. ('2016-12-12', '西南大学计信院前沿学术报告')
  78. 一共有75条数据!
  79. Process finished with exit code 0

从网页中爬取图片

eg:从https://maoyan.com/board/4?offset=10中爬取图片,存到位置C:\\Users\\22725\\Desktop\\temp

format 格式控制函数 foramt函数更常见的用法其实是str.format()

  1. 示例:
  2. >>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
  3. 'hello world'
  4. >>> "{0} {1}".format("hello", "world") # 设置指定位置
  5. 'hello world'
  6. >>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
  7. 'world hello world'

代码:

  1. import pymysql
  2. import requests
  3. from hashlib import md5
  4. import re
  5. import os
  6. def get_text(url):
  7. r = requests.get(url)
  8. r.raise_for_status()
  9. r.encoding = r.apparent_encoding
  10. return r.text
  11. def parse_html(url, list):
  12. demo = get_text(url)
  13. # 将正则表达式编译成正则表达式对象,方便复用该正则表达式
  14. # ".*?" :匹配任意字符串
  15. # [\u4e00-\u9fa5] :匹配中文
  16. # (\d{
  17. 4}-\d{
  18. 2}-\d{
  19. 2}) : 匹配日期
  20. patern = re.compile('img\sdata-src="(.*?)"\salt', re.S)
  21. results = re.findall(patern, demo)
  22. for result in results:
  23. list.append(result)
  24. return list
  25. list = []
  26. for i in range(0,2):#左闭右开区间[0,2)
  27. url = 'https://maoyan.com/board/4?offset='+str(10*i)
  28. list = parse_html(url, list)
  29. count = 0
  30. for i in list:
  31. count = count + 1
  32. print(i)#输出图片链接
  33. print("一共有"+str(count)+"条数据!")
  34. def download_image(url):#保存图片链接
  35. r = requests.get(url)
  36. r.raise_for_status()
  37. save_image(r.content)
  38. def save_image(content):#下载图片
  39. file_path = '{0}/{1}.{2}'.format('C:/Users/22725/Desktop/temp', md5(content).hexdigest(), 'jpg')#注意斜杠是/
  40. #format('文件储存地址',哈希算法随机生成子文件名称,'文件格式')
  41. if not os.path.exists(file_path):#os.path.exists(file_path)判断文件是否存在,存在返回1,不存在返回0
  42. with open(file_path, 'wb') as f:
  43. f.write(content)
  44. f.close()
  45. for i in list:
  46. download_image(i)
  47. print("下载成功")

输出:

ContractedBlock.gif ExpandedBlockStart.gif

  1. C:\Users\22725\PycharmProjects\A\venv\Scripts\python.exe C:/Users/22725/.PyCharmCE2019.1/config/scratches/scratch.py
  2. https://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c
  3. https://p0.meituan.net/movie/283292171619cdfd5b240c8fd093f1eb255670.jpg@160w_220h_1e_1c
  4. https://p0.meituan.net/movie/289f98ceaa8a0ae737d3dc01cd05ab052213631.jpg@160w_220h_1e_1c
  5. https://p1.meituan.net/movie/6bea9af4524dfbd0b668eaa7e187c3df767253.jpg@160w_220h_1e_1c
  6. https://p1.meituan.net/movie/b607fba7513e7f15eab170aac1e1400d878112.jpg@160w_220h_1e_1c
  7. https://p0.meituan.net/movie/da64660f82b98cdc1b8a3804e69609e041108.jpg@160w_220h_1e_1c
  8. https://p0.meituan.net/movie/46c29a8b8d8424bdda7715e6fd779c66235684.jpg@160w_220h_1e_1c
  9. https://p0.meituan.net/movie/223c3e186db3ab4ea3bb14508c709400427933.jpg@160w_220h_1e_1c
  10. https://p1.meituan.net/movie/ba1ed511668402605ed369350ab779d6319397.jpg@160w_220h_1e_1c
  11. https://p0.meituan.net/movie/b0d986a8bf89278afbb19f6abaef70f31206570.jpg@160w_220h_1e_1c
  12. https://p1.meituan.net/movie/18e3191039d5e71562477659301f04aa61905.jpg@160w_220h_1e_1c
  13. https://p1.meituan.net/movie/14a7b337e8063e3ce05a5993ed80176b74208.jpg@160w_220h_1e_1c
  14. https://p1.meituan.net/movie/6bc004d57358ee6875faa5e9a1239140128550.jpg@160w_220h_1e_1c
  15. https://p0.meituan.net/movie/ae7245920d95c03765fe1615f3a1fe3865785.jpg@160w_220h_1e_1c
  16. https://p1.meituan.net/movie/6a964e9cee699267053bd6a4bf6f2671195394.jpg@160w_220h_1e_1c
  17. https://p0.meituan.net/movie/43d259ecbcd53e8bbe902632772281d6327525.jpg@160w_220h_1e_1c
  18. https://p0.meituan.net/movie/2bbaa395c825920fac397706369746e4300686.jpg@160w_220h_1e_1c
  19. https://p1.meituan.net/movie/ad974d3527879f00be2eec29135118163728582.jpg@160w_220h_1e_1c
  20. https://p0.meituan.net/movie/932bdfbef5be3543e6b136246aeb99b8123736.jpg@160w_220h_1e_1c
  21. https://p1.meituan.net/movie/aacb9ed2a6601bfe515ef0970add1715623792.jpg@160w_220h_1e_1c
  22. 一共有20条数据!
  23. 下载成功
  24. Process finished with exit code 0

1468919-20190707111818640-788483407.png

转载于:https://www.cnblogs.com/-citywall123/p/11145712.html

发表评论

表情:
评论列表 (有 0 条评论,546人围观)

还没有评论,来说两句吧...

相关阅读