scrapy 笔记(1)

作者: kolaman | 来源:发表于2015-04-19 23:51 被阅读759次

    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
    

    相关文章

      网友评论

        本文标题:scrapy 笔记(1)

        本文链接:https://www.haomeiwen.com/subject/uzgyfttx.html