0%

爬虫教程2 框架爬虫

Python 简易爬虫

1 Scrapy框架

1.1 框架介绍

通过ORM,把爬取的数据对应到python的对象中,完成数据的爬取。

1.2 基本操作

1
2
3
4
5
6
7
8
9
10
11
#可能安装的依赖包
>>>pip install wheel
>>>cd c:/
>>>pip install Twi+(tab)

>>>pip install scrapy

#创建项目
>>>scrapy startproject aSpider


1.2.1 项目的目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
aSpider
---
aSpider
---
__init__.py
__pycache__
middlewares.py
settings.py
spiders #用于实现爬虫的文件
__init__.pyc
items.py #用于写类(class)实现ORM的文件
pipelines.py
settings.pyc
scrapy.cfg

1.3 Xpath

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

1
2
3
4
5
6
7
8
9
/html/head/title/text()
#选择HTML文档<head>元素下面的<title>标签内的文本内容

//td:
#选择所有的td元素

//div[@class="mine"]
#选择所有包含class="mine"属性的div标签元素

  • xpath():返回selectors,每一个select表示一个xpath参数表达式选择的节点
  • css():返回selectors,每一个select表示一个css参数表达式选择的节点
  • extract():返回一个unicode字符串,内容为xpath选中的内容
  • re():返回一个unicode字符串,内容为正则表达式的内容

1.4 spider

存于项目的spiders文件夹下,itcast_spider.py中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class aSpider(scrapy.spiders.Spider):
name="itcast"
allowd_domains = ["http://www.itcast.cn"]
start_urls = ["http://www.itcast.cn/channel/teacher.shtml#ac"]

def parse(self,response):
for site in response.xpath('//div[@class="li_txt"]'):
teacher_name = site.xpath('h3/text()').extract()
teacher_level = site.xpath('h4/text()').extract()
teacher_info = site.xpath('p/text()').extract()

print teacher_name[0]
print teacher_level[0]
print teacher_info[0]
print "============="

1.5 items.py

1
2
3
4
5
6
7
8
9
10
11
import scrapy

class aSpiderItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
pass

class ItcastItem(scrapy.Item):
name = scrapy.Field()
level = scrapy.Field()
info = scrapy.Field()

1.6 改写spider

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
import scrapy
from aSpider.items import ItcastItem

class aSpider(scrapy.spiders.Spider):
name="itcast"
allowd_domains = ["http://www.itcast.cn"]
start_urls = ["http://www.itcast.cn/channel/teacher.shtml#ac"]

items = []

def parse(self,response):
for site in response.xpath('//div[@class="li_txt"]')

teacher_name = site.xpath('h3/text()').extract()
teacher_level = site.xpath('h4/text()').extract()
teacher_info = site.xpath('p/text()').extract()

print teacher_name[0]
print teacher_level[0]
print teacher_info[0]
print "============="

item = ItcastItem()
#一个对象数据

item['name']=teacher_name[0]
item['level']=teacher_level[0]
item['info']=teacher_info[0]

items.append(item)

return items

1.7 爬取内容

1
2
3
4
5
#爬取内容
>>>python3 -m scrapy crawl itcast

#爬取内容至json中
>>>scrapy crawl itcast -o itcast_teacher.json -t json