python爬虫scrapy入门

scrapy是一个爬取网站数据,提取结构数据编写的应用框架

项目流程:

1.新建项目,在项目目录中,输入终端命令:

scrapy startproject mySpider

myspider是项目名称,此时会创建一个myspider文件夹,目录结构大致如下:

mySpider/
scrapy.cfg
mySpider/
    __init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
        ...

这些文件是:

  • scrapy.cfg: 项目的配置文件。
  • mySpider/: 项目的Python模块,将会从这里引用代码。
  • mySpider/items.py: 项目的目标文件。
  • mySpider/pipelines.py: 项目的管道文件。
  • mySpider/settings.py: 项目的设置文件。
  • mySpider/spiders/: 存储爬虫代码目录。

2.明确目标
打开items.py文件,item定义结构化数据字段,用来保存爬到的数据

import scrapy

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

3.制作爬虫
在命令行输入,将在myspider/spider目录下创建一个名叫itcast的爬虫,并且指定了爬取域的范围:

scrapy genspider itcast "itcast.cn"

打开 mySpider/spider目录里的 itcast.py,默认增加了下列代码:

import scrapy

class ItcastSpider(scrapy.Spider):
    name = "itcast"
    allowed_domains = ["itcast.cn"]
    start_urls = (
        'http://www.itcast.cn/',
    )

    def parse(self, response):
          filename = "teacher.html"
          open(filename, 'w').write(response.body)

注意
name = “” :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。
allow_domains = [] 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。
start_urls = () :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。

4.最后运行。在myspider目录下执行:

scrapy crawl itcast

提取数据

爬取到的数据是网页源码格式:

<div class="li_txt">
    <h3>  xxx  </h3>
    <h4> xxxxx </h4>
    <p> xxxxxxxx </p>

然后根据xpath表达式来提取数据:

  • /html/head/title: 选择HTML文档中 标签内的 元素
  • /html/head/title/text(): 选择上面提到的 元素的文字
  • //td: 选择所有的 元素
  • //div[@class=“mine”]: 选择所有具有 class=“mine” 属性的 div 元素

将数据封装到itcastItem对象中

def parse(self, response):
#open("teacher.html","wb").write(response.body).close()

# 存放老师信息的集合
items = []

for each in response.xpath("//div[@class='li_txt']"):
    # 将我们得到的数据封装到一个 `ItcastItem` 对象
    item = ItcastItem()
    #extract()方法返回的都是unicode字符串
    name = each.xpath("h3/text()").extract()
    title = each.xpath("h4/text()").extract()
    info = each.xpath("p/text()").extract()

    #xpath返回的是包含一个元素的列表
    item['name'] = name[0]
    item['title'] = title[0]
    item['info'] = info[0]

    items.append(item)

# 直接返回最后数据
return items
发布了39 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42123182/article/details/90716104