python爬虫入门看这个就够了大数据 爬虫Python AI SqlPython爬虫作业

Scrapy框架

2017-12-21  本文已影响21人  Thinkando

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。
Scrapy 使用了 Twisted(其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

01 Scrapy架构图(绿线是数据流向):

image.png

02 入门案例

以爬取1000本书名和价格信息为例子

021 下载 Scrapy
pip3 install scrapy
$ scrapy startproject example
image.png
022. 网页解析

网址:http://books.toscrape.com/

爬虫核心思想
1 爬虫从哪个或哪些页面开始爬取?
2 对于一个已下载的页面, 提取其中的哪些数据?
3 爬取完当前页面后,接下来爬取哪个或哪些页面?

023. 代码实现
# coding=utf-8
import scrapy
class BooksSpider(scrapy.Spider):
    # 一个项目中可能有多个爬虫,这个爬虫的名字叫"books",
    name = "books"

    # 定义爬虫爬取的起始点, 起始点可以是多个
    start_urls = ['http://books.toscrape.com/']

    # 提取数据
    def parse(self, response):
        # 先定位每一本书,每一本书在<article class="product_pod">里
        for book in response.css('article.product_pod'):
            # 书名在article/h3/a 元素的title里
            # <a title="A Light in the Attic">A Light in the...</a>
            name=book.xpath('./h3/a/@title').extract_first()
            # 书价格在<p class="price_color">$51.77</p>的text中
            price = book.css('p.price_color::text').extract_first()
            yield {
                'name':name,
                'price':price,

            }
    # 提取链接
    # 下一页的url 在ul.pager>li.next>a 里面
        next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
        if next_url:
            # 如果找到下一页的URL, 得到绝对路径, 构造新的Request对象
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url,callback=self.parse)
image.png
# scrapy crawl <spider_name>
# -o books.csv 输出到csv文件
$ scrapy crawl books -o books.csv
# 不显示第一行的csv 头部
$ sed -n '2,$p' books.csv | cat -n
image.png
上一篇 下一篇

猜你喜欢

热点阅读