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

举报
用户已注销 发表于 2021/11/19 05:52:18 2021/11/19
【摘要】 在  python爬虫二:网易博客的图片  中的代码只需要一篇博客的url就可以把图片全部下载下来 如果想把一个网易博客用户的所有图片都下载下来,只需要利用搜索算法把他的所有博客url都找到即可。 对于网易博客来说,这一工作的难点在于,任何一篇博客的html代码中是不包含其他博客的url的,也就是说博客里面的互链...

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

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

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

代码:


  
  1. #coding=utf-8
  2. import re
  3. import urllib.request
  4. import os
  5. from selenium import webdriver #########需要先安装selenium
  6. user = 'jason0320' #########用户名
  7. theurl = 'http://' + user + '.blog.163.com/blog'
  8. thepath = 'D:\\wa' #########选择一个路径,确保其中存在url_path.txt
  9. url_path = thepath + '\\' + 'url_path.txt' #存储该用户所有页面链接
  10. phantomjs_path = "C:\phantomjs.exe" #########需要先下载phantomjs.exe
  11. coding = 'gbk'#########这个要去网页源代码里面查
  12. def get_all_url(): #获取该用户所有页面链接
  13. already = []
  14. all_url = ['http://jason0320.blog.163.com/blog/static/2703529720161017111442198']
  15. fp = open(url_path,'r')
  16. lines = fp.readlines()
  17. for line in lines:
  18. line = line.strip('\n')
  19. if line == '':
  20. continue
  21. already.append(line)
  22. all_url.append(line)
  23. fp.close()
  24. driver = webdriver.PhantomJS(executable_path=phantomjs_path,service_args=['--load-images=no']) #不加载图片,加快速度
  25. i=0
  26. fp = open(url_path,'w')
  27. already = list(set(already))
  28. for each in already:
  29. fp.write(each+'\n')
  30. while(i<len(all_url)):
  31. url = all_url[i]
  32. i=i+1
  33. try:
  34. driver.get(url)
  35. except:
  36. print('连接失败')
  37. print(url)
  38. continue
  39. html = driver.page_source
  40. url_list = re.findall('.blog.163.com/blog/static/[0-9]*',html)
  41. for each in url_list:
  42. u = 'http://' + user + each
  43. if u not in all_url:
  44. all_url.append(u) #广度优先搜索
  45. if u not in already:
  46. fp.write(u+'\n')
  47. already.append(u)
  48. print(i)
  49. fp.close()
  50. if __name__=='__main__':
  51. 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

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


文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/77074899

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。