Python爬虫入门教程

文章目录

现在python非常的流行,python算是个全能的语言,可以做web、数据分析、自动化测试、脚本等等诸多方面的事情,尤其对于非科班出身的朋友,是一个非常好的编程入门语言。tennfy也花了一些时间在python方面,在后面一段时间内,会介绍python相关的内容。本篇文章会介绍python爬虫方面的一些内容。

Python爬虫入门知识

这里我们不讨论scrapy等python爬虫框架,只讨论一般的简单爬虫架构。

1、简单爬虫架构

简单的爬虫架构包含如下几个部分:URL管理、网页下载、网页解析、数据保存,如下图:

spider architecture

2、URL管理器

防止重复抓取、防止循环抓取;URL是爬虫爬取的入口和桥梁,除了入口URL外,剩下的URL我们需要在网页上获取并统一管理,防止重复抓取和防止循环抓取。

3、网页下载器

一般有如下几种方式:urllib(python 官方基础模块)、urllib2(python 官方基础模块)、requests(第三方包)。

1) urllib2使用

url主要提供了两个方法:urlopen和request方法。

1
2
3
4
5
import urllib2
 
resp = urllib2.urlopen('http://www.douban.com')
html = resp.read()
resp.close()

urlopen方法只是基础用法,如果遇到对方网站禁止爬虫等情况时,我们需要模拟浏览器的访问行为,这是便用到了request方法。

1
2
3
4
5
6
7
import urllib2
 
headers = {'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11'}
req = urllib2.Request(url="http://www.douban.com", headers=headers)
resp = urllib2.urlopen(req)
content = resp.read()
resp.close()

再进一步说,有些网站需要登录访问,这时候要用到了cookielib这样一个库。

1
2
3
4
5
6
7
8
9
10
11
import urllib, urllib2, cookielib
 
username = 'myuser'
password = 'mypassword'
 
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

4、网页解析器

一般采用如下几种方式:re(正则表达式模块)、html.parser、Beautiful Soup、lxml(Xpath)

html parser

5、数据存储

一般会采用文件(txt、csv)或者数据库(sqllite、mysql、Mangodb)的方式进行存储。

Python爬虫应用实例

本文以小说采集为例。

主要功能:获取指定小说的最新更新章节,并保存至txt文件中。
目标网站:http://www.22pq.com/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# -*- coding: utf-8 -*-
 
import urllib, urllib2, cookielib
 
import socket
import time
import re
 
timeout = 20
socket.setdefaulttimeout(timeout)
 
sleep_download_time = 10
time.sleep(sleep_download_time)
 
 
def html_download(url):
    headers = {'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11'}
    req = urllib2.Request(url=url, headers=headers)
    resp = urllib2.urlopen(req)
    content = resp.read().decode('gbk', 'ignore')
    resp.close()
    return content
 
 
def url_list_parser(data):
    # match and get url list
    pattern = re.compile('<td class="ccss"><a href="(.*?)">.*?</a>', re.S)
    items = re.findall(pattern, data)
    i = 0
    for item in items:
        i = i + 1
    print ('获取列表完成,文章数量为%d' % i)
    return items
 
 
def html_content_parser(data):
    # match and get html content
    pattern = re.compile('<div id="content">(.*?)<span style="font-size:19px;color:#539c43">', re.S)
    txts = re.findall(pattern, data)
    return txts
 
 
def save_file(save_path, txts):
    f_obj = open(save_path, 'w+')
    f_obj.write(txts)
    f_obj.close()
 
 
# open start url
start_url = 'http://www.22pq.com/book/9/9477/'
 
# download start url html
data = html_download(start_url)
 
# get url list
urls = url_list_parser(data)
 
# get last url
last_url = start_url + urls[-1]
print last_url
 
# download content url html
data = html_download(last_url)
 
# get content
content = html_content_parser(data)
 
# save data to file
save_path = 'novel.txt'
save_file(save_path, content[0].encode('utf-8'))

参考文章:
Python爬虫入门笔记:一个简单的爬虫架构
Python爬虫小说采集程序



本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/4534.html

下一篇文章:

上一篇文章:

1人参与了讨论

  1. 123 说:

    猴赛雷啊老板 啥时候教教我PYTHON啊

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

6 + 2 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部