scrapy 笔记(1)

1.创建scrapy项目:

scrapy startproject my_scrapy_project

创建后的目录结构

    |-- my_scrapy_project
    |   |-- __init__.py
    |   |-- items.py
    |   |-- pipelines.py
    |   |-- settings.py
    |   `-- spiders
    |       `-- __init__.py
     `-- scrapy.cfg
  • scrapy.cfg: 项目的配置文件
  • my_scrapy_project/: 该项目的python模块。之后您将在此加入代码。
  • my_scrapy_project/items.py: 项目中的item文件.
  • my_scrapy_project/pipelines.py: 项目中的pipelines文件.
  • my_scrapy_project/settings.py: 项目的设置文件.
  • my_scrapy_project/spiders/: 放置spider代码的目录.

2.通过 xpath 提取数据

import scrapy
    class DmozSpider(scrapy.Spider):
        name = "dmoz"
        allowed_domains = ["dmoz.org"]
        start_urls = [
            "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
            "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
        ]
    def parse(self, response):
            filename = response.url.split("/")[-2]
            with open(filename, "wb") as f:
                for sel in response.xpath('//ul/li'):
                    title = sel.xpath('a/text()').extract()
                    link = sel.xpath('a/@href').extract()
                    desc = sel.xpath('text()').extract()
                    print title, link, desc
                    f.writelines(str(title))
                    f.writelines(str(link))
                    f.writelines(str(desc)+'\n')
  • 写出结果:
  • [u’Top’][u’/’][u’\r\n\r\n ‘]
  • [u’Computers’][u’/Computers/’][]
  • [u’Programming’][u’/Computers/Programming/’][]
  • [u’Languages’][u’/Computers/Programming/Languages/’][]
  • [u’Python’][u’/Computers/Programming/Languages/Python/’][]
  1. /html/head/title: 选择HTML文档中 <head> 标签内的 <title> 元素
  2. /html/head/title/text(): 选择上面提到的 <title> 元素的文字
  3. //td: 选择所有的 <td> 元素
  4. //div[@class=”mine”]: 选择所有具有 class=”mine” 属性的 div 元素
name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

3.使用item,json

首先定义item.py:

import scrapy
class DmozItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    desc = scrapy.Field()

然后修改parse方法:

 def parse(self, response):
    for sel in response.xpath('//ul/li'):
        item = DmozItem()
        item['title'] = sel.xpath('a/text()').extract()
        item['link'] = sel.xpath('a/@href').extract()
        item['desc'] = sel.xpath('text()').extract()
        yield item

最后,将所爬到的数据保存为json格式:

scrapy crawl dmoz -o items.json
    原文作者:kolaman
    原文地址: https://www.jianshu.com/p/9c275a7a3e00
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞