python 抓取搜狗里的文章, 图片保存到七牛云

图片保存到七牛云的方法, 这边走http://lastidea.net/?p=7以下是代码

#-*- coding: UTF-8 -*-
import urllib, urllib2
from bs4 import BeautifulSoup
import socket
import requests
import datetime, time
import random
import os,stat,pwd
from qiniu import Auth
from qiniu import BucketManager


# 七牛云储储
def qiniu(url, key):
    access_key = ""  #yours access_key
    secret_key = ""  #yours secret_key
    bucket_name = ''  #yours bucket_name

    q = Auth(access_key, secret_key)
    bucket = BucketManager(q)

    ret, info = bucket.fetch(url, bucket_name, key)
    #assert ret['key'] == key

def go():
    # 设置代理访问
    url = 'http://www.xicidaili.com/nn/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
    }
    ip_list = get_ip_list(url, headers=headers)
    proxies = get_random_ip(ip_list)

    enable_proxy = True
    proxy_handler = urllib2.ProxyHandler(proxies)
    null_proxy_handler = urllib2.ProxyHandler({})
    if enable_proxy:
        opener = urllib2.build_opener(proxy_handler)
    else:
        opener = urllib2.build_opener(null_proxy_handler)
        urllib2.install_opener(opener)

    for i in [0, 1, 2, 4, 5, 6, 7, 8]: #
        url = "http://weixin.sogou.com/pcindex/pc/pc_"+str(i)+"/pc_"+str(i)+".html"
        #print url
        #http://weixin.sogou.com/pcindex/pc/pc_1/pc_1.html
        request = urllib2.Request(url)
        request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
        response = urllib2.urlopen(request, timeout=120)
        doc = response.read()
        soup = BeautifulSoup(''.join(doc), "html.parser")
        #print soup
        a = soup.find("a")
        href = a.get("href")
        img = soup.find("img")
        src = img.get("src")
        # print href;
        try:
            fileName = creatFileName("jpeg")
            
            #print src;
            if not src.startswith("http"):
                src = "http:" + src;
            
            #抓取图片到七牛云
            qiniu(src, fileName);
        except:
            pass
            continue
        time.sleep(3)
        getContent(href, i, qiniu_server_url + fileName)

def post(body=None):
    url = "http://test.lastidea.com/Admin/SystemArticle/add"  // your url
    #url = "http://localhost:8091/Admin/ArticleAdd/add"

    headers = {"Content-type": "application/x-www-form-urlencoded"}

    response = requests.post(url, data=body, headers=headers)
    #print response.text

def getContent(url, sogouClassId, src):
    socket.setdefaulttimeout(100)

    #print "---------";
    request = urllib2.Request(url)
    request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
    request.add_header('Referer','https://mp.weixin.qq.com/')
    response = urllib2.urlopen(request)
    doc = response.read()
    #print "---------";
    #print doc;
    soup = BeautifulSoup(''.join(doc), "html.parser")

    title = soup.find(id="activity-name")

    #print title
    imgs = soup.find(id="js_content").findAll("img")
    #print imgs
    for img in imgs:
        imgDataSrc = img.get('data-src')
        imgType = img.get('data-type')
        if imgDataSrc:
            if not imgDataSrc.startswith("http"):
                imgDataSrc = "http:" + imgDataSrc;
                
            fileName = creatFileName(imgType)
            count = 1
            while count <= 3:
                try:
                    qiniu(imgDataSrc, fileName)
                    break
                except socket.timeout:
                    err_info = 'Reloading for %d time' % count if count == 1 else 'Reloading for %d times' % count
                    print(err_info)
                    count += 1

            img['data-src'] = qiniu_server_url + fileName
            img['data-original'] = qiniu_server_url + fileName
            img['src'] = qiniu_server_url + "loading.gif" # 正在加载图片
            img['class'] = "lazy"
            #time.sleep(1)
        else:
            pass

    # 组织post数据
    if sogouClassId == 1: articleClassId = 17 #热门
    elif sogouClassId == 4: articleClassId = 16 #八卦精
    elif sogouClassId == 0: articleClassId = 10 #搞笑
    elif sogouClassId == 8: articleClassId = 11 #爱生活
    elif sogouClassId == 7: articleClassId = 12 #汽车迷
    elif sogouClassId == 6: articleClassId = 13 #财经类
    elif sogouClassId == 5: articleClassId = 14 #科技咖
    elif sogouClassId == 2: articleClassId = 15 #养生堂


    jsContent = soup.select("#activity-name, #js_content")
    jsContent = jsContent[0].__str__() + jsContent[1].__str__()

    body = {
        "title" : title.getText().strip(),
        "articleClassId" : articleClassId,
        "img" : src,
        "content" : jsContent,
        "attr[]" : 1,
        "click" : random.randint(10000, 100000)
    }
    #print body
    
    post(body=body)

# 获取代理IP
def get_ip_list(url, headers):
    web_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(web_data.text, "html.parser")
    ips = soup.find_all('tr')
    ip_list = []
    for i in range(1, len(ips)):
        ip_info = ips[i]
        tds = ip_info.find_all('td')
        ip_list.append(tds[1].text + ':' + tds[2].text)
    return ip_list

# 随机得到一个代理IP
def get_random_ip(ip_list):
    proxy_list = []
    for ip in ip_list:
        proxy_list.append('http://' + ip)
    proxy_ip = random.choice(proxy_list)
    proxies = {'http': proxy_ip}
    return proxies

    #print(proxies)

def creatFileName(ext = "png"):
    return str(int(round(time.time() * 1000))) + str(random.randint(10000,99999)) + "." + str(ext)

# 七牛云外链服务器地址
qiniu_server_url = "http://ph4xfr5l1.bkt.clouddn.com"
go()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容