上一篇文章 簡(jiǎn)書首頁數(shù)據(jù)抓取的答疑 ,分析了在抓取簡(jiǎn)書首頁時(shí)的問題吱型,還有一些小的細(xì)節(jié)需要注意逸贾。
一、Scrapy: url length > 2083 的問題
按照上一篇文章的思路方法津滞,構(gòu)造好URL铝侵,加上headers參數(shù),能夠順利獲取到第2触徐、3咪鲜、4頁的數(shù)據(jù),但是加載到第5頁時(shí)出現(xiàn)一個(gè)錯(cuò)誤:
是說url過長(zhǎng)锌介,超過2083個(gè)字符嗜诀。第5頁的url有81個(gè)參數(shù)(80個(gè)id和page),一共2425個(gè)字符孔祸,用瀏覽器(chrome, firefox)直接打開訪問能正確加載到數(shù)據(jù)隆敢。
關(guān)于url too long 的問題,查了一下,有網(wǎng)友測(cè)試了個(gè)瀏覽器和服務(wù)器支持的最大URL長(zhǎng)度,附表如下:
瀏覽器 | URL長(zhǎng)度限制 |
---|---|
IE | URL最大限制是2083個(gè)字節(jié)弃甥,Path長(zhǎng)度最大是2048字節(jié)(Get請(qǐng)求)。 |
Firefox | 65536 |
Safari | 80000以上 |
Opera | 190000字節(jié)以上 |
Chrome | 8182字節(jié) |
Apache Server | 8192字節(jié) |
IIS | 16384字節(jié) |
Perl HTTP::Daemon | 至少8000字節(jié) |
在請(qǐng)求時(shí)USER_AGENT 的設(shè)置并不是IE温自,但還是有這個(gè)限制。我試了一下用requests直接發(fā)送請(qǐng)求皇钞,可以獲取到數(shù)據(jù)悼泌。
scrapy 在setting.py中增加一個(gè)參數(shù)即可:
URLLENGTH_LIMIT = 20000
再次啟動(dòng)爬蟲,正常抓取夹界。但是抓取到第8頁時(shí)馆里,發(fā)現(xiàn)就沒有數(shù)據(jù)返回了,狀態(tài)碼是400可柿。在瀏覽器中依次加載到第8頁也是一樣鸠踪,獲取不到數(shù)據(jù),暫不清楚原因复斥。
有一點(diǎn)需要更正:雖然分頁url傳遞的id數(shù)量增加了营密,下一頁每次獲取的數(shù)據(jù)仍然是20條。
二目锭、結(jié)構(gòu)化數(shù)據(jù)需要加上判斷
在頁面文章信息中评汰,每篇文章都有瀏覽量纷捞,評(píng)論量(包括0),獲贊量被去,但不是每一篇文章都有 打賞和 所屬專題兰绣。
解決以上問題,就能抓取到簡(jiǎn)書首頁文章的相關(guān)數(shù)據(jù)编振。