博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抓取今日头条部分信息
阅读量:6160 次
发布时间:2019-06-21

本文共 2885 字,大约阅读时间需要 9 分钟。

hot3.png

import requests import re from urllib.parse import urlencode from requests.exceptions import RequestException import json from bs4 import BeautifulSoup import codecs from conm import *

header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', } #定义获取内容的方法 def get_page_index(offset,keyword): data = { 'offset': offset, 'format': 'json', 'keyword': keyword, 'autoload': 'true', 'count': 20, 'cur_tab': 3, } #合成url url = '?' + urlencode(data) #对请求做些异常处理 try: response = requests.get(url,headers = header) if response.status_code == 200: return response.text return None except RequestException: print('请求索引页出错') return None

def parse_page_index(html): data = json.loads(html) if data and 'data' in data.keys(): for item in data.get('data'): yield item.get('article_url')

#获取详情页面 def get_page_detail(url): res = requests.get(url,headers = header) try: if res.status_code == 200: return res.text return None except RequestException: print('请求失败') return None #解析详细页面 def parse_page_detail(html,url): soup = BeautifulSoup(html, 'lxml') title = soup.select('title')[0].get_text() images_pattern = re.compile(r'gallery: JSON.parse("(.*?)"),', re.S) result = re.search(images_pattern, html) if result: # group(0)是原始字符串, group(1)是第一个括号匹配到的字符串 # groups()以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last) # codecs: 使不具有转义的反斜杠具有转义功能,最难的一步骤 data_str = codecs.getdecoder('unicode_escape')(result.group(1))[0]

json_data = json.loads(data_str)    if json_data and 'sub_images' in json_data.keys():        sub_images = json_data.get('sub_images')        images = [item.get('url') for item in sub_images]        for image in images:            download_img(image)        return {            'title': title,            'images': images,            'url': url        }else:    print('没有搜索到符合条件的gallery数据', end='\n\n')

import pymongo #定义数据库连接函数 client = pymongo.MongoClient(MONGO_URL) db = client[MONGO_DB]

#存储方法 def save_to_mongo(result): if db[MONG_TABLE].insert(result): print('存储成功') return True return False

#定义下在图片的方法 def download_img(url): print('正在下载',url) try: response = requests.get(url, headers=header) if response.status_code == 200: save_image(response.content) return None except RequestException: print('请求索引页出错') return None #定义存储图片的方法 import os from hashlib import md5 def save_image(content): file_path ='{0}/{1}.{2}'.format('mao',md5(content).hexdigest(),'jpg') if not os.path.exists(file_path): with open(file_path,'wb') as f: f.write(content)

#主测试函数 def main(offset): html = get_page_index(offset,'街拍') for url in parse_page_index(html): result = get_page_detail(url) ok = parse_page_detail(result,url) save_to_mongo(ok)

from multiprocessing import Pool if name == 'main': groups = [x * 20 for x in range(GROUP_START, GROUP_END)] pool = Pool() pool.map(main,groups)

转载于:https://my.oschina.net/u/2511906/blog/1933380

你可能感兴趣的文章
apache 伪静态 .htaccess
查看>>
unity3d 截屏
查看>>
ASP.NET MVC学习之控制器篇
查看>>
MongoDB ServerStatus返回信息
查看>>
分析jQuery源码时记录的一点感悟
查看>>
android中的textview显示汉字不能自动换行的一个解决办法
查看>>
程序局部性原理感悟
查看>>
UIView 动画进阶
查看>>
ROS机器人程序设计(原书第2版)1.4.7 在BeagleBone Black中安装rosinstall
查看>>
Spring如何处理线程并发
查看>>
linux常用命令(用户篇)
查看>>
获取组件的方式(方法)
查看>>
win2008 server_R2 自动关机 解决
查看>>
我的友情链接
查看>>
在C#调用C++的DLL简析(二)—— 生成托管dll
查看>>
Linux macos 常用终端操作
查看>>
企业网络的管理思路
查看>>
Linux磁盘分区与挂载
查看>>
J2se学习笔记一
查看>>
DNS视图及日志系统
查看>>