爬豆瓣豆列

目的:把精彩豆列頻道里的每個豆列里的內(nèi)容抓取出來。
流程是抓取目錄頁精彩豆列頻道豆列的地址-對每個豆列所有頁數(shù)都抓取具體內(nèi)容、網(wǎng)址、時間。
這就很標準crawlspider干的活了,把目錄頁的地址寫成start_request依次爬取,然后對每個豆列都用rules控制。

圖片.png

圖片.png

目錄頁的分析:
豆瓣豆列挺有意思,沒做分頁,直接js獲取數(shù)據(jù),json數(shù)據(jù)又長得像html的樣子,沒別的參數(shù)非常好爬。
json長這樣:

request

有了這兩項就可以想提取多少就提取多少豆列地址了,我做了前200個。

import scrapy
from scrapy.spiders import CrawlSpider,Rule
from scrapy.linkextractors import LinkExtractor
from pyquery import PyQuery as pq
import requests
from douban.items import DoubanItem
import logging

class DbSpider(CrawlSpider):
    name = 'db'
    # allowed_domains = ['douban.com/doulist/']
    
    rules = (Rule(
        LinkExtractor(allow ='\?start'), callback = 'parse_detail', follow = True),)

    # restrict_xpaths = ('//*[@id="content"]/div/div[1]/div[25]/a')
    def start_requests(self):
        url = 'https://www.douban.com/j/doulist/doulists?start=0&limit=200'
        res = requests.get(url)
        cont = pq(res.json()['html'])
        for item in cont('.doulist-item').items():
            logging.info(item('.title a').attr('href'))
            yield scrapy.Request(item('.title a').attr('href'))

    def parse_detail(self, response):
        logging.info(response.url)

        res = pq(response.body)
        for item in res('.doulist-item .mod').items():
            dbitem = DoubanItem()
            dbitem['title'] = item('.title a').text()
            dbitem['index_url'] = response.url
            logging.info(item('.title a').text())
            dbitem['url'] = item('.title a').attr('href')
            dbitem['times'] = item('.time span').text()
            yield dbitem

有幾個坑:

  1. restrict_xpaths = ('//*[@id="content"]/div/div[1]/div[25]/a')可以提取url,但是遇到很多頁中間有省略項比如1 2...9 10,他就只能提取1,2,9,10,想來也是3-8都沒有顯示出來怎么提取呢,這時候用allow網(wǎng)址提取就好了,網(wǎng)址https://www.douban.com/doulist/37669191/?start=25&sort=time&playable=0&sub_type=,相似性是‘start=’前面的問號需轉(zhuǎn)譯。
    2.rules需iterable,這次rules只有一項所以要在后面加逗號。
    3.restrict_xpaths用瀏覽器提取
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評論 19 139
  • 一:Scrap Shell 運行在終端的工具,用來調(diào)試scrapy??梢栽谖磫觭pider的情況下嘗試及調(diào)試代碼...
    仙靈兒閱讀 678評論 0 0
  • 每日一千字的第三天。 “那個……勞請再給個命題?!?“人言可畏” 從第三天開始,寫東西就正常起來。這無疑是件好事,...
    長路M閱讀 737評論 0 4
  • 零點十分,一次偶然在豆瓣看了一篇文章“總有人陪你浪跡天涯”,這讓我想起了我自己以及那些年的那個男孩。他,是我初中、...
    一個愛泡吧的偽文青閱讀 974評論 6 8
  • 奶奶生在粗獷的北方,但卻有著南方女子的溫婉、秀氣。沒見過她年輕時的樣子,老了的奶奶反正是個俏實的婆婆。 ...
    做自己的女王_e3c9閱讀 516評論 0 4

友情鏈接更多精彩內(nèi)容