鱼C论坛

 找回密码
 立即注册
查看: 1582|回复: 1

关于爬虫保存图片流程的问题(写了许多注释)

[复制链接]
发表于 2018-3-30 18:53:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wongyusing 于 2018-10-14 19:11 编辑

代码如下:
  1. import urllib
  2. import re
  3. import requests
  4. import time
  5. import os
  6. from lxml import etree
  7. '''
  8. 流程:
  9.        1.通过简谱分类中获取所有“部分”,#https://www.zhaogepu.com/jianpus
  10.        2.获取”部分“的url进行拼接,得到   #https://www.zhaogepu.com/jianpus/1
  11.        3.获取“部分”的页码   #https://www.zhaogepu.com/jianpus/1/2.html
  12.        4.获取乐谱的url       #https://www.zhaogepu.com/jianpu/287159.html
  13.        5.打开乐谱的url获取图片  
  14. '''

  15. def url_open(url):  # 网页打开函数,以防被禁
  16.     headers = {
  17.         'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"}
  18.     req = requests.get(url, headers=headers)
  19.     req.encoding = 'utf-8'
  20.     return req.text

  21. def get_section_num(url):#获取“部分”后缀的url
  22.     ret = url_open(url)
  23.     html = etree.HTML(ret)
  24.     sites = html.xpath('/html/body/div[6]/ul')
  25.     for site in sites:
  26.         folder_name = site.xpath('/html/body/div[6]/ul//a/text()')
  27.         section_urls = site.xpath('/html/body/div[6]/ul//a/@href')
  28.         return folder_name,section_urls
  29.               #文件夹名字, 分类的url
  30. def get_page_num(section_url):#获取“部分”的页码
  31.     ret = url_open(section_url)     #https://www.zhaogepu.com/jianpus/1
  32.     html = etree.HTML(ret)
  33.     sites = html.xpath('/html/body/div[7]/div/a[last()-1]/@href')[0]
  34.     req = r'/jianpus/.*?/(.*?).html'   #/jianpus/1/30.html
  35.     site = re.findall(req, sites)[0]
  36.     for i in range(1,int(site)+1):
  37.         page_url = section_url + '/' + str(i) + '.html'
  38.         page_name = '第' + str(i) + '页'
  39.         return page_url,page_name
  40.               #页码url, 页码名字(用于创建文件夹名字)

  41. def get_score_url(page_url):#获取每一页的乐谱url
  42.     ret = url_open(page_url)  # https://www.zhaogepu.com/jianpu/390516.html
  43.     html = etree.HTML(ret)
  44.     base_url = 'https://www.zhaogepu.com'
  45.     sites = html.xpath('//tr//td[2]/a/@href')
  46.     for site in sites:
  47.         score_url = base_url + site

  48.         return score_url
  49.               #乐谱详情页url

  50. def get_img(score_url):#获取图片的url和乐曲标题
  51.     ret = url_open(score_url)  # https://www.zhaogepu.com/jianpu/390516.html
  52.     html = etree.HTML(ret)
  53.     sites = html.xpath('/html/body/div[4]/div[1]/div[4]/a/@href')
  54.     title = html.xpath('/html/body/div[4]/div[1]/h1/text()')
  55.     for img_url in sites:

  56.         return img_url,title
  57.               #图片地址,标题名字(用于创建文件夹名)



  58. def score(): #主函数
  59.     url = 'https://www.zhaogepu.com/jianpus'
  60.     folder_name, section_urls = get_section_num(url)#获取“部分”后缀的url和部分的序数,folder_name(用作文件夹名)
  61.     base_url = 'https://www.zhaogepu.com'
  62.     for i in section_urls:
  63.         section_url = base_url + i   #https://www.zhaogepu.com/jianpus/1
  64.         page_url, page_name = get_page_num(section_url)#获取“部分”的页码
  65.        #页码url,  页码名 (用于创建文件夹)
  66.         score_url = get_score_url(page_url)#获取乐谱的url
  67.        #↑↑乐谱详情页的url
  68.         img_url, title = get_img(score_url)#获取图片并保存
  69.        #↑↑↑↑     ↑↑↑↑
  70.        #图片url, 标题名(用于创建文件夹)

  71. #保存方式:乐谱>>>>第一部分>>>>第一页>>>>标题名>>>>图片
  72.         #乐谱->>>folder_name->>>page_name->>>title->>>图片


  73. if __name__ == "__main__":
  74.     score()
复制代码


问题如下:
1.如何才能让爬取下来的图片按”乐谱>>>>第一部分>>>>第一页>>>>标题名>>>>图片“保存?
2.如果用scrapy写的话该怎么写?最近在学,但还是不会用。
3.这个爬虫还能写少点代码吗?就是让代码少一点,不用写那么多。
4.能否推荐点Python爬取数据保存到mySQL数据库的代码或者文章,让我研究一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-30 19:27:00 | 显示全部楼层
https://github.com/Hopetree/Jobs-search
保存到MySQL和mongodb都有,自己看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-9 23:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表