|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 wongyusing 于 2018-10-14 19:11 编辑
代码如下:
- import urllib
- import re
- import requests
- import time
- import os
- from lxml import etree
- '''
- 流程:
- 1.通过简谱分类中获取所有“部分”,#https://www.zhaogepu.com/jianpus
- 2.获取”部分“的url进行拼接,得到 #https://www.zhaogepu.com/jianpus/1
- 3.获取“部分”的页码 #https://www.zhaogepu.com/jianpus/1/2.html
- 4.获取乐谱的url #https://www.zhaogepu.com/jianpu/287159.html
- 5.打开乐谱的url获取图片
- '''
- def url_open(url): # 网页打开函数,以防被禁
- headers = {
- 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"}
- req = requests.get(url, headers=headers)
- req.encoding = 'utf-8'
- return req.text
- def get_section_num(url):#获取“部分”后缀的url
- ret = url_open(url)
- html = etree.HTML(ret)
- sites = html.xpath('/html/body/div[6]/ul')
- for site in sites:
- folder_name = site.xpath('/html/body/div[6]/ul//a/text()')
- section_urls = site.xpath('/html/body/div[6]/ul//a/@href')
- return folder_name,section_urls
- #文件夹名字, 分类的url
- def get_page_num(section_url):#获取“部分”的页码
- ret = url_open(section_url) #https://www.zhaogepu.com/jianpus/1
- html = etree.HTML(ret)
- sites = html.xpath('/html/body/div[7]/div/a[last()-1]/@href')[0]
- req = r'/jianpus/.*?/(.*?).html' #/jianpus/1/30.html
- site = re.findall(req, sites)[0]
- for i in range(1,int(site)+1):
- page_url = section_url + '/' + str(i) + '.html'
- page_name = '第' + str(i) + '页'
- return page_url,page_name
- #页码url, 页码名字(用于创建文件夹名字)
- def get_score_url(page_url):#获取每一页的乐谱url
- ret = url_open(page_url) # https://www.zhaogepu.com/jianpu/390516.html
- html = etree.HTML(ret)
- base_url = 'https://www.zhaogepu.com'
- sites = html.xpath('//tr//td[2]/a/@href')
- for site in sites:
- score_url = base_url + site
- return score_url
- #乐谱详情页url
- def get_img(score_url):#获取图片的url和乐曲标题
- ret = url_open(score_url) # https://www.zhaogepu.com/jianpu/390516.html
- html = etree.HTML(ret)
- sites = html.xpath('/html/body/div[4]/div[1]/div[4]/a/@href')
- title = html.xpath('/html/body/div[4]/div[1]/h1/text()')
- for img_url in sites:
- return img_url,title
- #图片地址,标题名字(用于创建文件夹名)
- def score(): #主函数
- url = 'https://www.zhaogepu.com/jianpus'
- folder_name, section_urls = get_section_num(url)#获取“部分”后缀的url和部分的序数,folder_name(用作文件夹名)
- base_url = 'https://www.zhaogepu.com'
- for i in section_urls:
- section_url = base_url + i #https://www.zhaogepu.com/jianpus/1
- page_url, page_name = get_page_num(section_url)#获取“部分”的页码
- #页码url, 页码名 (用于创建文件夹)
- score_url = get_score_url(page_url)#获取乐谱的url
- #↑↑乐谱详情页的url
- img_url, title = get_img(score_url)#获取图片并保存
- #↑↑↑↑ ↑↑↑↑
- #图片url, 标题名(用于创建文件夹)
- #保存方式:乐谱>>>>第一部分>>>>第一页>>>>标题名>>>>图片
- #乐谱->>>folder_name->>>page_name->>>title->>>图片
- if __name__ == "__main__":
- score()
复制代码
问题如下:
1.如何才能让爬取下来的图片按”乐谱>>>>第一部分>>>>第一页>>>>标题名>>>>图片“保存?
2.如果用scrapy写的话该怎么写?最近在学,但还是不会用。
3.这个爬虫还能写少点代码吗?就是让代码少一点,不用写那么多。
4.能否推荐点Python爬取数据保存到mySQL数据库的代码或者文章,让我研究一下。 |
|