1.python爬虫抓取单一网页

一. 爬虫简介:

批量抓取网页有效信息,与人工相比,爬虫能够在短时间内抓取所需要大量的信息,进而进行数据分析。

二. 爬虫过程:

要抓取一个单一的网页,我们要有一个网页的地址,然后把网页下载成html的格式,(这个python2的urllib2有方法可以实现)html这个对象其实就是一个字符串,然后进行字符串处理,进而抓取这个字符串有用的信息,比如特定的文本信息,图片地址用来下载图片等。然后保存有用信息。也就是说过程为:1.下载为html。2.解析html获取有用信息。3.保存信息。用python实现这3个过程,首先要引入urllib2模块。

import urllib2

1. 下载为html(简单下载器的实现)

对于一个给定的url链接,将其下载为html。

    def download_html(url):
        request = urllib2.Request(url)
        response = urllib2.urlopen(request)
        return response.read()

传入url链接,首先可以创建一个request对象,(创建对象过程中可以进行伪装浏览器头,伪装IP地址等操作),然后用resquest对象为参创建一个response对象,这个对象像文件一样,对其进行read()操作,就可以得到一个html对象。

2. 解析html(简单解析器的实现)

对于一个给定的html对象,抓取有用信息,以豆瓣电影抓取简介为例子。

对于https://movie.douban.com/subject/3541415/,盗梦空间的页面。鼠标放在简介的地方,右键选择检查。


看到如上页面,这意味着,我们只要将#<span property="v:summary" class="">这个节点在html里面找到,然后它的text属性就是文本的信息。

对此我们可以引入第三方模块Beautifulsoup用来帮助查找字符串。

from bs4 import BeautifulSoup
def parser(url, html):
    data = {}
    soup = BeautifulSoup(html,  "html.parser")

    #<span property="v:summary" class="">
    summary = soup.find('span', property="v:summary")
    
    data['summary'] = summary.get_text()
    
    return data

Beautifulsoup简单用法:1.创建一个soup对象(第一个参数为html,第二个参数为html解析器)。2.使用find和find_all方法,前者找出一个,后者找出所有。方法的参数第一个为节点标签tag的名称,第二个为节点的属性,可传入正则表达式。3.使用get_text()或者其他方法,将所需要信息先保存在变量里面。

3. 保存信息(输出器的简单实现)

将变量里面的信息保存到本地文件或者数据库。下面将豆瓣的例子保存在txt文件里面

def output(data):
    fout = open("output.txt", "w")
    fout.write("%s" %data['summary'].encode('utf8')) 
    fout.close()
就是打开文件,逐一写入文件,注意使用Beautifulsoup的get_text()之后返回的字符串编码是Unicode编码,要将其encode为‘utf8'再写入文件


三. 最终代码:

# -*- coding: UTF-8 -*-

import urllib2 
from bs4 import BeautifulSoup 
 
def parser(url, html):  
    data = {}  
    soup = BeautifulSoup(html,  "html.parser")  
  
    #<span property="v:summary" class="">  
    summary = soup.find('span', property="v:summary")  
      
    data['summary'] = summary.get_text() 
    return data
	
def download_html(url):  
    request = urllib2.Request(url)  
    response = urllib2.urlopen(request)  
    return response.read()  
	
def output(data):  
    fout = open("output.txt", "w")
    fout.write("%s" %data['summary'].encode('utf8'))   
    fout.close()  

if __name__ == "__main__":
    url = "https://movie.douban.com/subject/3541415/"
    html = download_html(url)
    data = parser(url, html)
    output(data)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值