日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python-玩转数据-Scrapy中Spiders

發(fā)布時(shí)間:2023/12/16 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python-玩转数据-Scrapy中Spiders 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Spiders工作流程:

Spiders是Scrapy中最重要的地方,它定義了如何爬取及解析數(shù)據(jù),可以說(shuō)Spiders是Scrapy框架中的核心所在。

  • 根據(jù)初始的urls生成requests對(duì)象并指定處理requests對(duì)象response的回調(diào)方法。初始的urls是由spider的start_urls屬性指定的,然后默認(rèn)調(diào)用start_requests方法生成對(duì)應(yīng)的requests對(duì)象,處理requests對(duì)象response的默認(rèn)回調(diào)方法是parse。
  • 在回調(diào)方法里,解析response的內(nèi)容并返回希望提取的數(shù)據(jù),可以返回字典格式的數(shù)據(jù),Item對(duì)象,request對(duì)象或者是這些對(duì)象的迭代器。如果是返回的request對(duì)象,同樣也要指定其的回調(diào)方法(可以是當(dāng)前的這一個(gè)),然后scrapy也會(huì)同樣的處理這些request對(duì)象:獲取他們的response,使用回調(diào)方法解析并返回?cái)?shù)據(jù)。
  • 在回調(diào)方法里,使用scrapy的selector(選擇器)來(lái)提取response里的數(shù)據(jù)并返回(也可以使用其他的解析工具,如BeautifulSoup、lxml等)。
  • 最后從spider返回的數(shù)據(jù),我們可以通過(guò)Item Pipeline寫(xiě)入數(shù)據(jù)庫(kù)或使用feed exports保存到文件中。
  • 雖然該循環(huán)對(duì)任何類(lèi)型的spider都(多少)適用,但scrapy仍然為了不同的需求提供了多種默認(rèn)spider。 之后將討論這些spider。

    二、Spider屬性功能定義

    scrapy

    最簡(jiǎn)單的spider:scrapy.spiders.Spider

    scrapy中所有的spider都繼承的它。它提供了spider最主要的屬性和功能 - start_urls,start_requests(),parse()。

    name

    name - 用于定義spider名字的字符串。spider的名字是scrapy用于定位spider的,因此它的名字必須是唯一的。但是scrapy中沒(méi)有任何機(jī)制可以防止你多次實(shí)例化同一個(gè)spider。所以名字是spider最重要的屬性且是必須的。按慣例,如果spider是只爬取單一的域名,那spider名字就以域名來(lái)命名。如:爬取mywebsite.com的spider,通常取名為mywebsite。

    allowed_domains

    allowed_domains - 用于定義spider可以爬取的域名的字符串列表。如果OffsiteMiddleware被啟用了,則不屬于這個(gè)列表里的域名的url scrapy不會(huì)發(fā)送請(qǐng)求及進(jìn)行相關(guān)處理。

    start_urls

    start_urls - 定義spider開(kāi)始爬取數(shù)據(jù)的url列表。隨后生成的其它需要爬取的url都會(huì)是從這些url對(duì)應(yīng)的頁(yè)面中提取數(shù)據(jù)生成出來(lái)的。

    custom_settings

    custom_settings - 定義該spider配置的字典。這個(gè)配置會(huì)在項(xiàng)目范圍內(nèi)運(yùn)行這個(gè)spider的時(shí)候生效。比如我們?cè)趕etting.py中將 DEFAULT_REQUEST_HEADERS屬性注釋掉,運(yùn)行爬蟲(chóng)將報(bào)500錯(cuò)誤。 當(dāng)執(zhí)行某個(gè)爬蟲(chóng)時(shí)需要進(jìn)行特定的設(shè)置,可以在custom_settings屬性中進(jìn)行自定義,以此來(lái)覆蓋掉全局性的設(shè)置。

    crawler

    crawler - 定義spider實(shí)例綁定的crawler對(duì)象。這個(gè)屬性是在初始化spider類(lèi)時(shí)由from_crawler()方法設(shè)置的。crawler對(duì)象概括了許多項(xiàng)目的組件。

    settings

    settings - 運(yùn)行spider的配置。這是一個(gè)settings對(duì)象的實(shí)例。

    logger

    logger - 用spider名字創(chuàng)建的python記錄器。可以用來(lái)發(fā)送日志消息。

    from_crawler

    from_crawler(crawler, *args, **kwargs) - scrapy用于創(chuàng)建spiders的類(lèi)方法。一般都不需要重寫(xiě)這個(gè)方法,因?yàn)槟J(rèn)的實(shí)現(xiàn)是作為一個(gè)__init__()方法的代理,傳參數(shù)args和kwargs來(lái)調(diào)用它。這個(gè)方法就是用來(lái)在新的spider實(shí)例中設(shè)置crawler和settings屬性的,以便之后在spider的代碼中可以訪問(wèn)。

    參數(shù):

    • crawler(crawler實(shí)例)- spider將綁定的crawler
    • args(list)- 傳遞給__init__()方法的參數(shù)
    • kwargs(字典)- 傳遞給__init__()方法的關(guān)鍵字參數(shù)

    start_requests()

    start_requests() - 這個(gè)方法必須返回該spider的可迭代(iterable)的初始requests對(duì)象供后續(xù)爬取。Scrapy會(huì)在該spider開(kāi)始爬取數(shù)據(jù)時(shí)被調(diào)用,且只會(huì)被調(diào)用一次,因此可以很安全的將start_requests()做為一個(gè)生成器來(lái)執(zhí)行。默認(rèn)的執(zhí)行會(huì)生成每一個(gè)在start_urls中的url對(duì)應(yīng)的request對(duì)象。

    如果想修改開(kāi)始爬取一個(gè)域名的requests對(duì)象,以下是重寫(xiě)的方法(你需要開(kāi)始用POST請(qǐng)求先登錄系統(tǒng)):

    parse(response)

    parse(response) - Scrapy默認(rèn)的回調(diào)用來(lái)處理下載的response。parse方法負(fù)責(zé)處理response,返回爬取的數(shù)據(jù)或者還有繼續(xù)爬取的url(request對(duì)象)。其他requests回調(diào)方法與Spider類(lèi)有相同的要求。這個(gè)方法與其它的request回調(diào)一樣,必須返回可迭代的request對(duì)象、字典或Item對(duì)象。

    參數(shù):

    • response(Response對(duì)象)- 需要解析的response
    • log(message[, level, component]) - 通過(guò)Spider的記錄器包裝發(fā)送的日志信息,保持與之前的兼容性。
    • closed(reason) -
      當(dāng)Spider關(guān)閉的時(shí)候調(diào)用的方法。這個(gè)方法為spider_closed提供了一個(gè)信號(hào)給signals.connect()。

    看個(gè)例子:

    一個(gè)回調(diào)方法返回多個(gè)requests對(duì)象和items:

    如果不使用start_urls,還可以直接使用start_requests()方法;要使數(shù)據(jù)更具結(jié)構(gòu)化可以使用Items:

    Spider的參數(shù)

    可以通過(guò)設(shè)置Spider的參數(shù)來(lái)修改它的某些屬性。一般的用法是定義Spider開(kāi)始爬取數(shù)據(jù)的URL或限制爬取網(wǎng)站的指定部分的數(shù)據(jù),但是它其實(shí)還可以用于設(shè)置Spider的任何功能。Spider的參數(shù)是通過(guò)crawl命令的-a選項(xiàng)來(lái)傳遞給Spider的,如:

    • (scrapyEnv) MacBook-Pro:~ $ scrapy crawl myspider -a
      category=electronics

    這些參數(shù)都可以在Spider的__init__方法中訪問(wèn)到:

    默認(rèn)的__init__方法會(huì)將傳遞來(lái)的參數(shù)作為Spider的屬性,所以還可以通過(guò)Spider的屬性訪問(wèn)命令行中設(shè)置的Spider參數(shù),如:

    注意:Spider的參數(shù)只能是字符串格式,對(duì)于參數(shù)Spider是不會(huì)進(jìn)行任何解析的。如果你在命令行中設(shè)置了start_urls參數(shù),那你必須手動(dòng)的在Spider中將它轉(zhuǎn)換成list然后把list設(shè)置為Spider的屬性,否則Spider會(huì)將字符串格式的參數(shù)start_urls中的每一個(gè)字符當(dāng)成一個(gè)單獨(dú)的url去生成Request對(duì)象。

    一個(gè)通過(guò)HttpAuthMiddleWare設(shè)置http認(rèn)證證書(shū)還有通過(guò)UserAgentMiddleware設(shè)置user agent的例子:

    • (scrapyEnv) MacBook-Pro:~ $ scrapy crawl myspider -a http_user=myuser
      -a http_pass=mypassword -a user_agent=mybot

    Spider的參數(shù)也可以通過(guò)Scrapyd的schedule.json API來(lái)傳遞。

    更多信息請(qǐng)參考官方文檔
    https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spiders.html

    總結(jié)

    以上是生活随笔為你收集整理的Python-玩转数据-Scrapy中Spiders的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。