设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1544|回复: 1

初见网络爬虫

[复制链接]

233

主题

6983

金钱

9968

积分

高级用户

发表于 2017-3-16 15:03:23 | 显示全部楼层 |阅读模式
Python版本:2.7

Python因其简洁及易读性广泛用于运维、爬虫和数据方面。

导入模块

现在我们开始来编写第一只爬虫,首先需要有Python的环境,参考Python环境搭建及IDE选择进行安装。接下来需要导入相关模块,这只用到Python标准库里的三个模块就可以实现简单的爬虫。urllib模块用来下载图片,urllib2模块用来请求目标网站获取响应的内容,而re模块则是用来匹配字符串,提取有用的数据信息。

import urllib
import urllib2
import re

爬虫思路

爬虫主要是模拟人和浏览器来访问目标网站获取响应内容解析提取相关数据。下面要实现的爬虫的功能是获取百度贴吧楼层里的所有壁纸图片。那么代码需要实现模拟浏览器的行为,也就是访问贴吧地址,获取response内容解析后找到所有的图片地址并将所有图片保存下来。

电脑与服务器

代码实现

先创建Request对象再使用urlopen请求目标网站,虽然可以直接使用urlopen请求目标网站,但是后续无法构造headers信息。read方法读取响应的内容,查看网页源代码是utf-8编码方式为了防止编码问题对读取的内容进行解码操作。因要提取的内容为图片,所有构建正则表达式字符串并使用re.find_all获取所有的图片链接,此时urls对象是列表,for循环遍历所有的链接后用urlretrieve方法下载图片文件。

代码如下:

def download_jpg(url):
    """爬取贴吧的图片并下载到本地"""
    request = urllib2.Request(url)               # 创建request对象
    response = urllib2.urlopen(request)          # 请求request对象
    print response.getcode()                     # 打印状态码
    html = response.read().decode('utf-8')       # 读取相应的内容,decode是根据网页编码方式进行解码
    string = r'src="(http://imgsrc\.baidu\.com.+?\.jpg)" pic_ext="jpeg"'  # 正则表达式字符串
    urls = re.findall(string, html)              # 找出所有符合正则表达式的字符串,返回的是列表
    # print jpg_url

    x = 0
    for url in urls:                             # 循环打印所有url
        urllib.urlretrieve(url, "%s.jpg" % x)    # 下载所有的图片,注意文件名称带.jpg
        x += 1
        print urlif __name__ == '__main__':
    download_jpg('http://tieba.baidu.com/p/3797994694')


End.

作者:简杨 (中国统计网特邀认证作者)
原文链接:http://www.itongji.cn/cms/article/articledetails?articleid=5084

285

主题

1万

金钱

1万

积分

资深用户

发表于 2017-3-23 14:04:19 | 显示全部楼层
:)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表