Python简单知乎爬虫--爬取页面的图片并下载到本地



写了一个小爬虫,其实也算不上爬虫,只是抓取了页面的图片。这里主要是BeautifulSoup解析HTML源码,非常的方便啊,简直是神器,之前一直是使用正则表达式去解析非常痛苦啊!!!!可怜


这里是BeautifulSoup的中文文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/


代码详细见注释,解释的非常清晰了。以后再慢慢加一些功能吧


最后附上我的这个小项目的github地址:https://github.com/qq1367212627/spider

原文链接:http://blog.csdn.net/qq_24489717/article/details/52653186

  1. #coding=utf-8  
  2.   
  3. import urllib2  
  4. from bs4 import BeautifulSoup  
  5. import os  
  6. import re  
  7.   
  8.   
  9. url="https://www.zhihu.com/question/36390957"#指定的URL  
  10.   
  11.   
  12. def download(_url,name):#下载函数  
  13.     if(_url==None):#地址若为None则跳过  
  14.         pass  
  15.     result=urllib2.urlopen(_url)#打开链接  
  16.     #print result.getcode()  
  17.     if(result.getcode()!=200):#如果链接不正常,则跳过这个链接  
  18.         pass  
  19.     else:  
  20.         data=result.read()#否则开始下载到本地  
  21.         with open(name, "wb") as code:  
  22.             code.write(data)  
  23.             code.close()  
  24.   
  25.   
  26. res=urllib2.urlopen(url)#打开目标地址  
  27. respond=res.read()#获取网页地址源代码  
  28.   
  29. count=0#计数君  
  30. soup=BeautifulSoup(respond)#实例化一个BeautifulSoup对象  
  31. lst=[]#创建list对象  
  32.   
  33. for link in soup.find_all("img"):#获取标签为img的内容  
  34.     address=link.get('data-original')#获取标签属性为data-original的内容,即图片地址  
  35.     lst.append(address)#添加到list中  
  36.   
  37. s=set(lst)#去重  
  38. for address in s:  
  39.     if(address!=None):  
  40.         pathName="E:\\2333\\"+str(count+1)+".jpg"#设置路径和文件名  
  41.         download(address,pathName)#下载  
  42.         count=count+1#计数君+1  
  43.         print "正在下载第:",count  
#coding=utf-8

import urllib2
from bs4 import BeautifulSoup
import os
import re


url="https://www.zhihu.com/question/36390957"#指定的URL


def download(_url,name):#下载函数
    if(_url==None):#地址若为None则跳过
        pass
    result=urllib2.urlopen(_url)#打开链接
    #print result.getcode()
    if(result.getcode()!=200):#如果链接不正常,则跳过这个链接
        pass
    else:
        data=result.read()#否则开始下载到本地
        with open(name, "wb") as code:
            code.write(data)
            code.close()


res=urllib2.urlopen(url)#打开目标地址
respond=res.read()#获取网页地址源代码

count=0#计数君
soup=BeautifulSoup(respond)#实例化一个BeautifulSoup对象
lst=[]#创建list对象

for link in soup.find_all("img"):#获取标签为img的内容
    address=link.get('data-original')#获取标签属性为data-original的内容,即图片地址
    lst.append(address)#添加到list中

s=set(lst)#去重
for address in s:
    if(address!=None):
        pathName="E:\\2333\\"+str(count+1)+".jpg"#设置路径和文件名
        download(address,pathName)#下载
        count=count+1#计数君+1
        print "正在下载第:",count




Python 模拟爬虫抓取知乎用户信息以及人际拓扑关系,使用scrapy爬虫框架,数据存储使用mongo数据库。   本地运行请注意:爬虫依赖mongo和rabbitmq,因此这两个服务必须正常运行和配置。为了加快下载效率,图片下载是异步任务,因此在启动爬虫进程执行需要启动异步worker,启动方式是进入zhihu_spider/zhihu目录后执行下面命令:   celery -A zhihu.tools.async worker --loglevel=info   爬虫项目部署:   进入zhihu_spider后执行```docker-compose up``` ,进入container后和本地运行方法相同,依次启动mongo、rabbitmq、异步任务、爬虫进程即可。   其它需要说明的问题:   爬虫框架从start\_requests开始执行,此部分会提交知乎主页的访问请求给引擎,并设置回调函数为post_login.   post\_login解析主页获取\_xsrf保存为成员变量中,并提交登陆的POST请求,设置回调函数为after\_login.   after\_login拿到登陆后的cookie,提交一个start\_url的GET请求给爬虫引擎,设置回调函数parse\_people.   parse\_people解析个人主页,一次提交关注人和粉丝列表页面爬虫引擎,回调函数是parse\_follow, 并把解析好的个人数据提交爬虫引擎写入mongo。   parse\_follow会解析用户列表,同时把动态的人员列表POST请求发送只引擎,回调函数是parse\_post\_follow,把解析好的用户主页链接请求也发送到引擎,人员关系写入mongo。   parse\_post\_follow单纯解析用户列表,提交用户主页请求至引擎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值