用Python爬半次元小姐姐 – 第二版

最近挺有空的,于是就把之前的爬虫(Python爬半次元小姐姐 – Python Spider For BCY)改了一下,然后现在能下载小姐姐们的全部页面的图片。

原理跟上次差不多,就是变成两层的获取页面

原理

  1. 根据ID获取主页链接
  2. 在主页链接里通过<a>标签获取详细页面的地址
  3. 定义一个函数用于获取详细页面里面的<img>的src值
  4. 通过src值下载图片
  5. Done.

代码 (Python 2.7 With urllib,requests,lxml,BeautifulSoup4 and so on):

# -*- coding: utf-8 -*
import urllib
from sys import argv
import re
from bs4 import BeautifulSoup
from lxml import etree
import os
import requests


def getpage(nameid,pageid=1,wrongtry=0,leastlink=""):
    pageurl = u"http://bcy.net/u/%s/post/cos?p=%d" % (nameid, pageid) #获取页面地址
    print pageurl
    session = requests.session()
    html = session.get(pageurl, headers=headers)
    #返回网页内容
    soup = BeautifulSoup(html.content, "html.parser")
    #print soup
    #解析网页
    for asrc in soup.find_all('div', class_='postWorkCard__img ovf'):
        a_src = asrc.find('a').get('href')
        pageurl = "http://bcy.net/" + a_src
        print pageurl
        downpic(pageurl,nameid)
    if not pageurl == leastlink:
        pageid += 1
        leastlink = pageurl
        getpage(nameid, pageid, wrongtry,leastlink)
    else:
        pageid = pageid - 1
        print"共爬到%d页" % pageid
    #寻找内页地址

def downpic(pagelink,nameid):
    global picnum
    session1 = requests.session()
    html1 = session1.get(pagelink, headers=headers)
    soup1 = BeautifulSoup(html1.content, "html.parser")
    #print soup1

    for links in soup1.findAll('img',class_="detail_std"):
        img_src = links.get('src')
        img_src = re.sub(r'/w.*$', "", img_src)
        #print img_src
        picname = re.search(r"(?<=/post/).+?(?=$)", img_src, re.M)
        picname = re.search(r"(?<=/).+?(?=$)", picname.group(0), re.M)
        CurrentPath = os.getcwd()
        #filename = CurrentPath + "/bcy/%s_image/%s" % (nameid, picname.group(0))
        #filename = "/bcy/%s_image/%s" % (nameid, picname.group(0))
        filename = CurrentPath + u"\\bcy\%s_image\%s" % (nameid, picname.group(0))
        picnum = picnum +1
        print "-----------------"
        print picname.group(0)
        print img_src
        print filename
        print u'下完了%s张' % picnum
        print "-----------------"
        try:
            urllib.urlretrieve(img_src,filename)
        except Exception:
            print(u'这张图片下载出问题了: %s' % filename)

#程序入口
if __name__ == '__main__':
    page = 0
    member_id = raw_input('请输入coser ID,例如:18943,不知道的亲F12在图片的链接里面找')
    if not os.path.exists("bcy/%s_image" % member_id):
        os.makedirs("bcy/%s_image" % member_id)
        print"创建目录"
        #创建目录
	print "存储在 PY文件目录/bcy 中"
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
    headers = {'User-Agent': user_agent, 'Referer': 'http://bcy.net'}
    #准备headers
    pagenum = 0
    picnum = 0
    #准备计次变量
    getpage(member_id,1)

 

5 条评论

昵称

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  1. f

    kankan

  2. tankeryang
    1. 很懒的樱花

      star了2333

  3. tcdw

    看上去很诱人。。然而非等宽代码字体看上去好难受。。

    1. 很懒的樱花

      还行吧hhh