python爬虫三:获取一个网易用户的所有图片(selenium+phantomjs)

在  python爬虫二:网易博客的图片  中的代码只需要一篇博客的url就可以把图片全部下载下来

如果想把一个网易博客用户的所有图片都下载下来,只需要利用搜索算法把他的所有博客url都找到即可。

对于网易博客来说,这一工作的难点在于,任何一篇博客的html代码中是不包含其他博客的url的,也就是说博客里面的互链是动态链接。为了解决这个问题,我们需要selenium和phantomjs,利用无头浏览器模拟用户点击,从而抓取url

代码:

#coding=utf-8
import re
import urllib.request
import os
from selenium import webdriver #########需要先安装selenium

user = 'jason0320' #########用户名
theurl = 'http://' + user + '.blog.163.com/blog'
thepath = 'D:\\wa' #########选择一个路径,确保其中存在url_path.txt
url_path = thepath + '\\' + 'url_path.txt' #存储该用户所有页面链接
phantomjs_path = "C:\phantomjs.exe" #########需要先下载phantomjs.exe
coding = 'gbk'#########这个要去网页源代码里面查

def get_all_url(): #获取该用户所有页面链接
    already = []
    all_url = ['http://jason0320.blog.163.com/blog/static/2703529720161017111442198']
    fp = open(url_path,'r')
    lines = fp.readlines()
    for line in lines:
        line = line.strip('\n')
        if line == '':
            continue
        already.append(line)
        all_url.append(line)
    fp.close()
    driver = webdriver.PhantomJS(executable_path=phantomjs_path,service_args=['--load-images=no']) #不加载图片,加快速度
    i=0
    fp = open(url_path,'w')
    already = list(set(already))
    for each in already:
        fp.write(each+'\n')
    while(i<len(all_url)):        
        url = all_url[i]   
        i=i+1
        try:
            driver.get(url)
        except:
            print('连接失败')
            print(url)
            continue
        html = driver.page_source
        url_list = re.findall('.blog.163.com/blog/static/[0-9]*',html)
        for each in url_list:
            u = 'http://' + user + each
            if u not in all_url:
                all_url.append(u)     #广度优先搜索           
            if u not in already:
                fp.write(u+'\n')  
                already.append(u)
        print(i)
    fp.close()
    
if __name__=='__main__':
    get_all_url()

原理上,这个代码是可以获取所有url的,不过实际上这个程序受限于网络,网络不好的话会中断,所以实际上我只获取了jason0320的352个url

所有链接:

http://jason0320.blog.163.com/blog/static/2703529720166131113704
http://jason0320.blog.163.com/blog/static/27035297201478111818113
http://jason0320.blog.163.com/blog/static/27035297201508115710851
。。。。。。
http://jason0320.blog.163.com/blog/static/27035297201506105935484
http://jason0320.blog.163.com/blog/static/270352972015096472786

其中大部分被省略掉了,完整的后缀列表如下:

python爬虫三:获取一个网易用户的所有图片(selenium+phantomjs)_第1张图片

你可能感兴趣的:(python爬虫三:获取一个网易用户的所有图片(selenium+phantomjs))