scrapy踩坑記錄


title: scrapy踩坑記錄
tags: ['scrapy','python','post','request']
date: 2021-03-11
categories: "搬磚"


安裝了python3.8但是沒(méi)有pip

在ubuntu上從Python 3.4版和2.7.9版開(kāi)始律杠,總是可以使用ensurepip模塊來(lái)引導(dǎo)啟動(dòng)pip猖腕,具體如下:

C:\Users\Administrator>python -m ensurepip
Looking in links: c:\Users\ADMINI~1\AppData\Local\Temp\tmpcempbgwg
Processing c:\users\administrator\appdata\local\temp\tmpcempbgwg\setuptools-47.1
.0-py3-none-any.whl
Processing c:\users\administrator\appdata\local\temp\tmpcempbgwg\pip-20.1.1-py2.
py3-none-any.whl
Installing collected packages: setuptools, pip
Successfully installed pip-20.1.1 setuptools-47.1.0

爬蟲(chóng)https,不安全的問(wèn)題

Python2/3 解決訪問(wèn)Https時(shí)不受信任SSL證書(shū)問(wèn)題

ssl._create_default_context = ssl._create_unverified_context

安裝scrapy遇到錯(cuò)誤

  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/f2/16/3eb9c66a7bfb5220c7bcbaaac33d359fe8a157b028959cd210983749b2e0/Twisted-21.2.0-py3-none-any.whl (3.1 MB)
     |███████████████████████████████▌| 3.0 MB 262 kB/s eta 0:00:01
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the p
ackage contents carefully; someone may have tampered with them.
    Twisted[http2]>=17.9.0 from https://pypi.tuna.tsinghua.edu.cn/packages/f2/16/3eb9c66a7bfb5220c7bcbaaac33d359fe8a157b028959cd210983749b2e0/Twisted-21.2.0-py3-none-
any.whl#sha256=aab38085ea6cda5b378b519a0ec99986874921ee8881318626b0a3414bb2631e (from scrapy):
        Expected sha256 aab38085ea6cda5b378b519a0ec99986874921ee8881318626b0a3414bb2631e
             Got        c9b2f7ffbc1fb53011ba7c6500d784a78ef9e1f8274fa472eebc1eab930b216b

換個(gè)pip的源解決了

(venv) C:\Users\Administrator\Desktop\爬蟲(chóng)項(xiàng)目文件夾\scrapyDemo>pip3 install scrapy -i https://pypi.mirrors.ustc.edu.cn/simple

使用python2 環(huán)境安裝scrapy使用的時(shí)候報(bào)錯(cuò)from contextlib import suppress

原因

因?yàn)槲抑鞍惭b過(guò)python3燎窘,我的環(huán)境中的queuelib的版本為1.6.0恶复,是最新版本其爵,但是這個(gè)包剛剛好再1.6.0取消了對(duì)python2的支持界赔。

解決辦法

下載queuelib1.5.0的whl空民,安裝一下设捐。

下載地址https://www.cnblogs.com/klb561/p/9271322.html

No module named 'scrapy.xlib'

# scrapy1.7版本及以前
from scrapy.xlib.pydispatch import dispatcher
# 之后
from pydispatch import dispatcher

scrapy 數(shù)據(jù)保存json文件

# pipelines
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 導(dǎo)入 JsonItemExporter
from scrapy.exporters import JsonItemExporter
import time


class SpiderPipeline(object):
    # 構(gòu)造方法(初始化對(duì)象時(shí)執(zhí)行的方法)
    def __init__(self):
        # 使用 'wb' (二進(jìn)制寫(xiě)模式)模式打開(kāi)文件
        time_str = str(time.strftime('%Y_%m_%d_%H_%M_%S',time.localtime(time.time())))
        print time_str
        self.json_file = open(time_str + '_data.json', 'wb')
        # 構(gòu)建 JsonItemExporter 對(duì)象,設(shè)定不使用 ASCII 編碼层玲,并指定編碼格式為 'UTF-8'
        self.json_exporter = JsonItemExporter(self.json_file, ensure_ascii=False, encoding='UTF-8')
        # 聲明 exporting 過(guò)程 開(kāi)始号醉,這一句也可以放在 open_spider() 方法中執(zhí)行。
        self.json_exporter.start_exporting()

    # 爬蟲(chóng) pipeline 接收到 Scrapy 引擎發(fā)來(lái)的 item 數(shù)據(jù)時(shí)辛块,執(zhí)行的方法
    def process_item(self, item, spider):
        # 將 item 存儲(chǔ)到內(nèi)存中
        self.json_exporter.export_item(item)
        return item

    def close_spider(self, spider):
        # 聲明 exporting 過(guò)程 結(jié)束畔派,結(jié)束后,JsonItemExporter 會(huì)將收集存放在內(nèi)存中的所有數(shù)據(jù)統(tǒng)一寫(xiě)入文件中
        self.json_exporter.finish_exporting()
        # 關(guān)閉文件
        self.json_file.close()
# settings
ITEM_PIPELINES = {
   'NsmcSpider.pipelines.SpiderPipeline': 300,
}
其他方法

命令行執(zhí)行

scrapy crawl spider -o result.json -t json

crawl spider -o result.json -s FEED_EXPORT_ENCODING=UTF-8

爬蟲(chóng)速度慢或者速度不穩(wěn)定的另外一種解決辦法

把cookie給禁掉

custom_settings = {"COOKIES_ENABLED":False}

使用scrapy.http.Request數(shù)據(jù)不全的問(wèn)題

記得加上報(bào)文頭

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",# 這一條一定要加上
    }

出現(xiàn)錯(cuò)誤Filtered offsite request to

原因:allowed_domains和實(shí)際采集的網(wǎng)頁(yè)有出入

解決辦法:

        yield Request(url=home, method='get', headers=self.headers,dont_filter=True,
                      meta={"channel": response.meta["channel"], },
                      callback=self.parse_link)

加上dont_filter=True

或者 將allowed_domains的內(nèi)容改一下润绵,改成一級(jí)域名父虑,能夠和后面的匹配的上。

報(bào)錯(cuò)Filtered duplicate request: GET xxx - no more duplicates

原因: 爬取的url重復(fù)了授药,所以RedisSpider模塊默認(rèn)會(huì)記錄爬過(guò)的url,會(huì)把后面出現(xiàn)以前爬過(guò)的url去掉呜魄,導(dǎo)致重新開(kāi)啟程序爬取之前爬過(guò)的url悔叽,都被去除掉后就爬不到東西。

解決辦法:

加上dont_filter=True

scrapy有一個(gè)基于鏈接的去重爵嗅,加上dont_filter=True可以完整的采集娇澎,去重可以放到入庫(kù)的時(shí)候再處理。

ValueError: check_hostname requires server_hostname

可能是開(kāi)了代理

進(jìn)行請(qǐng)求的時(shí)候使用urlencode進(jìn)行轉(zhuǎn)碼報(bào)錯(cuò)TypeError: not a valid non-string sequence or mapping object

使用quote_plus

禁止重定向

yield Request(url=final, method='get', headers=self.headers,cookies=cookie,
              meta={"channel": response.meta["channel"], "start_hash": response.meta['start_hash'],
                    "dont_redirect":True,'handle_httpstatus_list': [302]},
              callback=self.parse_item)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睹晒,一起剝皮案震驚了整個(gè)濱河市趟庄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伪很,老刑警劉巖戚啥,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锉试,居然都是意外死亡猫十,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門呆盖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拖云,“玉大人,你說(shuō)我怎么就攤上這事应又≈嫦睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵株扛,是天一觀的道長(zhǎng)尤筐。 經(jīng)常有香客問(wèn)我汇荐,道長(zhǎng),這世上最難降的妖魔是什么叔磷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任拢驾,我火速辦了婚禮,結(jié)果婚禮上改基,老公的妹妹穿的比我還像新娘繁疤。我一直安慰自己,他們只是感情好秕狰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布稠腊。 她就那樣靜靜地躺著,像睡著了一般鸣哀。 火紅的嫁衣襯著肌膚如雪架忌。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天我衬,我揣著相機(jī)與錄音叹放,去河邊找鬼。 笑死挠羔,一個(gè)胖子當(dāng)著我的面吹牛井仰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播破加,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼俱恶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了范舀?” 一聲冷哼從身側(cè)響起合是,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锭环,沒(méi)想到半個(gè)月后聪全,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡田藐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年荔烧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汽久。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹤竭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出景醇,到底是詐尸還是另有隱情臀稚,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布三痰,位于F島的核電站吧寺,受9級(jí)特大地震影響窜管,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稚机,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一幕帆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赖条,春花似錦失乾、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至仿贬,卻和暖如春纽竣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茧泪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蜓氨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人队伟。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓语盈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缰泡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容