最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Scrapy之迭代爬取網頁中失效問題及解決

 更新時間:2022年12月19日 10:39:11   作者:bladestone  
這篇文章主要介紹了Scrapy之迭代爬取網頁中失效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

引言

在Scrapy中,在很多種情況下,需要一層層地進行爬取網頁數(shù)據(jù),就是基于url爬取網頁,然后在從網頁中提取url,繼續(xù)爬取,循環(huán)往復。

本文將講述一個在迭代爬取中,只能爬取第一層網頁的問題。

問題的提出

scrapy crawl enrolldata
Scrapy代碼執(zhí)行結果輸出如下:
“`
2018-05-06 17:23:06 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: enrolldata)
2018-05-06 17:23:06 [scrapy.utils.log] INFO: Versions: lxml 4.2.1.0, libxml2 2.9.8, cssselect 1.0.3, parsel 1.4.0, w3lib 1.19.0, Twisted 18.4.0, Python 3.6.1 (default, Apr 24 2017, 23:31:02) - [GCC 6.2.0 20161005], pyOpenSSL 17.5.0 (OpenSSL 1.1.0h 27 Mar 2018), cryptography 2.2.2, Platform Linux-4.15.0-20-generic-x86_64-with-debian-buster-sid
2018-05-06 17:23:06 [scrapy.crawler] INFO: Overridden settings: {‘BOT_NAME’: ‘enrolldata’, ‘CONCURRENT_REQUESTS’: 60, ‘CONCURRENT_REQUESTS_PER_IP’: 60, ‘DEPTH_LIMIT’: 5, ‘NEWSPIDER_MODULE’: ‘enrolldata.spiders’, ‘SPIDER_MODULES’: [‘enrolldata.spiders’]}
2018-05-06 17:23:06 [scrapy.middleware] INFO: Enabled extensions:
[‘scrapy.extensions.corestats.CoreStats’,
‘scrapy.extensions.telnet.TelnetConsole’,
‘scrapy.extensions.memusage.MemoryUsage’,
‘scrapy.extensions.logstats.LogStats’]
2018-05-06 17:23:06 [scrapy.middleware] INFO: Enabled downloader middlewares:
[‘scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware’,
‘scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware’,
‘scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware’,
‘scrapy.downloadermiddlewares.useragent.UserAgentMiddleware’,
‘scrapy.downloadermiddlewares.retry.RetryMiddleware’,
‘scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware’,
‘scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware’,
‘scrapy.downloadermiddlewares.redirect.RedirectMiddleware’,
‘scrapy.downloadermiddlewares.cookies.CookiesMiddleware’,
‘scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware’,
‘scrapy.downloadermiddlewares.stats.DownloaderStats’]
2018-05-06 17:23:06 [scrapy.middleware] INFO: Enabled spider middlewares:
[‘scrapy.spidermiddlewares.httperror.HttpErrorMiddleware’,
‘scrapy.spidermiddlewares.offsite.OffsiteMiddleware’,
‘scrapy.spidermiddlewares.referer.RefererMiddleware’,
‘scrapy.spidermiddlewares.urllength.UrlLengthMiddleware’,
‘scrapy.spidermiddlewares.depth.DepthMiddleware’]
2018-05-06 17:23:06 [scrapy.middleware] INFO: Enabled item pipelines:
[‘enrolldata.pipelines.EnrolldataPipeline’]
2018-05-06 17:23:06 [scrapy.core.engine] INFO: Spider opened
open spider ………..pipeline
2018-05-06 17:23:06 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-05-06 17:23:06 [py.warnings] WARNING: /home/bladestone/codebase/python36env/lib/python3.6/site-packages/scrapy/spidermiddlewares/offsite.py:59: URLWarning: allowed_domains accepts only domains, not URLs. Ignoring URL entry http://www.heao.gov.cn/ in allowed_domains.
warnings.warn(“allowed_domains accepts only domains, not URLs. Ignoring URL entry %s in allowed_domains.” % domain, URLWarning)

2018-05-06 17:23:06 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
end of start requests
2018-05-06 17:23:14 [scrapy.core.engine] DEBUG: Crawled (200)

 -*- coding: utf-8 -*-
import scrapy
from enrolldata.items import EnrolldataItem

from scrapy.http import FormRequest

class SchoolspiderSpider(scrapy.Spider):
    name = 'enrolldata'
    cookies = {}
    allowed_domains = ['http://www.heao.gov.cn/']
    start_urls = ['http://www.heao.gov.cn/JHCX/PZ/enrollplan/SchoolList.aspx']
   .............
   def start_requests(self):
        formdata = {}
        formdata['PagesUpDown$edtPage'] = '1'
        formdata['__EVENTTARGET'] = 'PagesUpDown$lbtnGO'
        formdata['__EVENTARGUMENT'] = ''
        formdata['__VIEWSTATE'] = '/wEPDwUKMjA1MTU4MDA1Ng9kFgICBQ9kFgICAQ8PFggeDGZDdXJyZW50UGFnZQIBHhFmVG90YWxSZWNvcmRDb3VudAK4ER4KZlBhZ2VDb3VudAKVAR4JZlBhZ2VTaXplAg9kZGSI36vb/TsBmDT8pwwx37ajH1x0og=='
        formdata['__VIEWSTATEGENERATOR'] = 'AABB4DD8'
        formdata['__EVENTVALIDATION'] = '/wEWBQLYvvTTCwK2r/yJBQK6r/CJBgLqhPDLCwLQ0r3uCMy0KhJCAT8jebTQL0eNdj7uk4L5'
        for i in range(1, 2):
            formdata['PagesUpDown$edtPage'] = str(i)
            yield FormRequest(url=self.start_urls[0], headers=self.headers, formdata=formdata, callback=self.parse_school)
        print("end of start requests")

    def parse(self, response):
        print("parse method is invoked")
        pass

    def parse_school(self, response):
        print("parse school data.....")
        urls = response.xpath('//*[@id="SpanSchoolList"]/div/div[2]/ul/li/a/@href').extract();
        print("print out all the matched urls")
        print(urls)

        for url in urls:
            request_url = self.base_url + url
            print("request_url in major:" + request_url)
            yield scrapy.Request(request_url, headers=self.request_headers,  cookies=self.cookies, callback=self.parse_major_enroll, meta=self.meta)
......

代碼沒有報錯,只是輸出了第一層的Web的爬取結果。但是第二層沒有執(zhí)行爬取。

問題分析

從日志來進行分析,沒有發(fā)現(xiàn)錯誤信息;第一層代碼爬取正確,但是第二層web爬取,沒有被執(zhí)行,代碼的編寫應該沒有問題的。

那問題是什么呢?會不會代碼沒有被執(zhí)行呢?通過添加日志,但是對應的代碼并沒有執(zhí)行,日志也被正常輸出。是不是被過濾或者攔截了,從而代碼沒有被執(zhí)行?

經過代碼審查之后,發(fā)現(xiàn)allowed_domains設置的問題,由于起設置不正確,導致其余的鏈接被直接過濾了。

關于allowed_domains需要是一組域名,而非一組urls。

問題的解決

需要將之前的domain name修改一下:

allowed_domains = [‘http://www.heao.gov.cn/‘]

將起修改為:

allowed_domains = [‘heao.gov.cn']

重新執(zhí)行爬蟲,發(fā)現(xiàn)多個層次是可以被正確爬取的。

總結

關于scrapy是一整套的解決方案,其中很多的設置和配置需要通過不同的實例來反復理解和應用的,才能如魚得水,庖丁解牛般快速定位問題。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python基于機器學習預測股票交易信號

    python基于機器學習預測股票交易信號

    近年來,隨著技術的發(fā)展,機器學習和深度學習在金融資產量化研究上的應用越來越廣泛和深入。目前,大量數(shù)據(jù)科學家在Kaggle網站上發(fā)布了使用機器學習/深度學習模型對股票、期貨、比特幣等金融資產做預測和分析的文章。本文就來看看如何用python預測股票交易信號
    2021-05-05
  • 在Python的struct模塊中進行數(shù)據(jù)格式轉換的方法

    在Python的struct模塊中進行數(shù)據(jù)格式轉換的方法

    這篇文章主要介紹了在Python的struct模塊中進行數(shù)據(jù)格式轉換的方法,文中還給出了C語言和Python語言的數(shù)據(jù)類型比較,需要的朋友可以參考下
    2015-06-06
  • Python將文字轉成語音并讀出來的實例詳解

    Python將文字轉成語音并讀出來的實例詳解

    今天小編就為大家分享一篇Python將文字轉成語音并讀出來的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python使用cn2an實現(xiàn)中文數(shù)字與阿拉伯數(shù)字的相互轉換

    Python使用cn2an實現(xiàn)中文數(shù)字與阿拉伯數(shù)字的相互轉換

    這篇文章主要介紹了Python使用cn2an實現(xiàn)中文數(shù)字與阿拉伯數(shù)字的相互轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python中綁定與未綁定的類方法用法分析

    Python中綁定與未綁定的類方法用法分析

    這篇文章主要介紹了Python中綁定與未綁定的類方法用法,結合實例形式分析了未綁定的類方法與綁定的實例方法相關使用技巧,需要的朋友可以參考下
    2016-04-04
  • 刪除pycharm鼠標右鍵快捷鍵打開項目的操作

    刪除pycharm鼠標右鍵快捷鍵打開項目的操作

    這篇文章主要介紹了刪除pycharm鼠標右鍵快捷鍵打開項目的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 跟老齊學Python之私有函數(shù)和專有方法

    跟老齊學Python之私有函數(shù)和專有方法

    這篇文章是老齊學Python系列文章的一篇,主要介紹了跟私有函數(shù)和專有方法,需要的朋友可以參考下
    2014-10-10
  • JS設計模式之責任鏈模式實例詳解

    JS設計模式之責任鏈模式實例詳解

    這篇文章主要介紹了JS設計模式之責任鏈模式,結合實例形式詳細分析了責任鏈模式的概念、原理、功能、使用場景及相關操作技巧,需要的朋友可以參考下
    2018-02-02
  • numpy數(shù)組切片的使用

    numpy數(shù)組切片的使用

    本文主要介紹了numpy數(shù)組切片的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python實現(xiàn)敏感詞過濾的五種方法

    Python實現(xiàn)敏感詞過濾的五種方法

    在我們生活中的一些場合經常會有一些不該出現(xiàn)的敏感詞,我們通常會使用*去屏蔽它,一些罵人的敏感詞和一些政治敏感詞都不應該出現(xiàn)在一些公共場合中,這個時候我們就需要一定的手段去屏蔽這些敏感詞,下面我來介紹一些簡單版本的Python敏感詞屏蔽的方法,需要的朋友可以參考下
    2025-04-04

最新評論

探索| 汶上县| 永仁县| 仁寿县| 莆田市| 景德镇市| 隆德县| 东山县| 西宁市| 龙井市| 大新县| 临夏县| 延寿县| 大同市| 六安市| 苏尼特右旗| 佛学| 柏乡县| 广德县| 英超| 中山市| 加查县| 綦江县| 苗栗市| 张家口市| 樟树市| 芜湖市| 崇礼县| 汝城县| 洪江市| 东至县| 浦北县| 房产| 金华市| 花莲市| 安义县| 广宗县| 沅陵县| 铜梁县| 平利县| 天长市|