给力星

Web Developer

Python网络爬虫入门教程

本文主要介绍了如何使用Python实现基础的网络爬虫来抓取网页内容(使用 Python 2.7 的 urllib2 库)。

基本使用

使用 urllib2 模块可以轻松抓取页面的源代码。主要用到两个函数:

  • urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
  • urllib2.urlopen(url[, data][, timeout])

例如抓取 so.com 的源代码:

import urllib2
req = urllib2.Request('http://www.so.com')
response = urllib2.urlopen(req)             # 发起请求
html = response.read()                      # 获取HTML内容,可以传入参数,限制HTML长度
print html

urllib2.urlopen() 返回一个类似文件的对象,有不少方法,比较常用的如 getcode(): 返回HTTP状态码。

发送表单数据

urllib2 默认采用 GET 请求,也可以发送 POST 请求,不过需要使用 urllib 的 urllib.urlencode() 来编码数据。

import urllib
import urllib2

url = 'http://www.xxx.com/register.php'

values = {'name' : 'NAME',
          'password' : 'PASSWORD',
        }

data = urllib.urlencode(values)   # 编码
req = urllib2.Request(url, data)  # 发起 POST 请求
response = urllib2.urlopen(req)
html = response.read()

如果在 urllib2.Request() 中不传入 data 参数,则是发起 GET 请求。

values = {'name' : 'NAME',
          'password' : 'PASSWORD',
        }
url_encode = urllib.urlencode(data);
# 数据被编码成 name=NAME&password=PASSWORD
url = 'http://www.xxx.com/register.php?' + url_encode
req = urllib2.Request(url)

设置http请求的header

urllib2 默认的 User-Agent 为 Python-urllib/2.7,网站可能会根据User-agent返回不同的内容,比如访问的是手机浏览器则返回相应的移动版内容。可以通过修改 User-agnet 来模拟访问环境。

import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('User-agent', 'Mozilla/5.0')
r = urllib2.urlopen(req)

抓取一般的网页这些内容就足够使用了。urllib2 还有很多高级用法,具体可以查阅官方文档 https://docs.python.org/2/library/urllib2.html

获取HTML代码后,接着一般还需要进行解析来提取我们所需要的内容。获取的HTML代码其实就是字符串,所以可以像处理文本那样使用正则表达式来进行处理。或者使用Python自带模块 HTMLParser 进行HTML的处理。

但正则表达式有时并不容易书写,HTMLParser也不太易用。如果对前端有了解,用过 jQuery 的,那么 pyQuery 将会是最佳选择。 pyQuery 是 jQuery 的Python实现,使用 jQuery(Javascript) 来处理HTML那么是合适不过了。

继续阅读: Python使用pyQuery解析HTML内容

4条评论

  1. 博主你好,我目前还在读研 明年就要找工作了,以后也想做前端,但是计算机基础不太好(跨专业),基本的html css js 都会一些,看了博主的经历很受启发,所有想请教一下博主,想要做前端 要达到去一些互联网公司的要求,还要接触哪些技术知识,哪些书需要看一下···

发表评论

电子邮件地址不会被公开。