街拍美图获取
来源:互联网 发布:淘宝主图psd模版 编辑:程序博客网 时间:2024/06/17 04:27
街拍图片的获取。
在网上搜索到一个项目,获取头条的街拍美图,于是跟着一起写下了这些代码,代码的思路很简明,下一步是如何将这个项目应用到更多的场景:
全部代码如下,包括数据库MongoDB的操作。
代码块
from urllib.parse import urlencodeimport requestsfrom requests.exceptions import RequestExceptionimport jsonfrom bs4 import BeautifulSoupimport reimport lxmlfrom config import *import pymongoimport osfrom hashlib import md5from multiprocessing import Poolclient = pymongo.MongoClient(MONGO_URL,connect=False)db = client[MONGO_DB]def get_page_index(offset,keyword): # offset来控制图集的下拉页出 项,keyword=街拍保证是街拍这一页 data = { 'offset': offset, 'format': 'json', 'keyword': keyword, 'autoload': 'true', 'count': '20', 'cur_tab': 3 } url = 'http://www.toutiao.com/search_content/? ' + urlencode(data) resonpse = requests.get(url) # 这里得到是json格式数据,要在原网页上来看,要取出什么键值对 try: if resonpse.status_code == 200: return resonpse.text return None except RequestException : print('请求索引页出错') return Nonedef parse_page_index(html): # 图集这一页需要得到article的URL,并且以列表形式返回。先得到的是json变量,然后取出里面data这个k值中包括 #article的这个信息 data = json.loads(html) if data and 'data' in data.keys(): # 有data这个键值,并且data在这个一系列返回的keys()中 for item in data.get('data'): yield item.get('article_url')def get_page_detail(url): try: resonpse = requests.get(url) if resonpse.status_code == 200: return resonpse.text return None except RequestException : print('请求详情页面出错') return Nonedef parse_page_detail(html,url): soup = BeautifulSoup(html,"lxml") title = soup.select('title')[0].get_text() print(title) images_pattern = re.compile('var gallery = (.*?);',re.S) result = re.search(images_pattern,html) if result: data = json.loads(result.group(1)) if data and 'sub_images' in data.keys(): sub_images = data.get('sub_images') images = [item.get('url') for item in sub_images] for image in images : download_image(image) return {'title':title, 'url':url, 'images':images }def save_to_mongo(result): if db[MONGO_TABLE].insert(result): print('存储到mongo_db成功',result) return True return Falsedef download_image(url): # 把url传过来,下载这些图片 print('正在下载',url) try: resonpse = requests.get(url) if resonpse.status_code == 200: save_image(resonpse.content) return None except RequestException : print('下载出错',url) return Nonedef save_image(content): file_path = '{0}/{1}.{2}'.format(os.getcwd(), md5(content).hexdigest(),'jpg') # 匹配md5值以免重复下载 if not os.path.exists(file_path): with open(file_path,'wb') as f: f.write(content) f.close()def main(offset) : html = get_page_index(offset,KEYWORD) #主函数中先调用 get_page_index()得到图集这个网页 for url in parse_page_index(html): html= get_page_detail(url) if html: result = parse_page_detail(html,url) if result :save_to_mongo(result) #print(result)if __name__ == '__main__': groups = [x*20 for x in range(GROUP_START,GROUP_END + 1)] pool = Pool()#开启多进程 pool.map(main,groups)
另外:数据库代码如下:
MONGO_URL = ‘localhost’
MONGO_DB = ‘toutiao’
MONGO_TABLE = ‘街拍’
GROUP_START = 1
GROUP_END = 20
KEYWORD = ‘街拍’
最后欢迎一起交流……
阅读全文
0 0
- 街拍美图获取
- 获取句柄获取指针
- C# 获取获取经纬度!
- 获取eclipse获取路径
- 获取版本号、获取手机型号
- 获取定位,获取屏幕
- 获取applicationContext、获取request
- Spring获取request获取session获取路径
- android 机器码获取/ 品牌获取 / 型号获取
- 获取磁盘分区
- 获取字体大小
- 获取文件大小
- 获取缩略图
- 获取cpuid
- 获取IP
- 获取路径
- 获取计算机信息
- 获取文件大小
- mysql中关于日期的一些sql语句
- 数组
- Servlet学习笔记 -- day01 ServletContext & Response
- 从零开始开发一个全栈Web应用实录
- JavaScript 选择框 选项移动
- 街拍美图获取
- 浅谈 c++中的内存存储
- 妙解网站流量的处理办法
- 中等_384_最长无重复字符的子串(6)
- leetcode之Combination Sum 问题
- nginx负载均衡、动静分离
- Python验证码识别处理实例
- git对比同一project不同分支的差异
- memcached的一些研究(关于memcached的内存分配机制)