scrapy demo

試著使用scrapy爬一個(gè)書本信息網(wǎng)站,存到本地csv文件(也可以json)。

安裝scrapy:

python3 -m pip install scrapy 

本質(zhì)其實(shí)就是定義自己的spider及其行為, 需要從scrapy里的Spider類繼承下來。新建webscraping-srapy.py如下

import scrapy

url = "http://books.toscrape.com/"

class BookSpider(scrapy.Spider):
    name = "bookspider"
    # def start_requests(self):
    #     urls = ['http://xx','http://xx']
    #     for url in urls:
    #         yield scrapy.Request(url=url, callback=self.parse)
    # 其實(shí)不需要override 此函數(shù)而是直接定義start_requests()會(huì)默認(rèn)使用的start_urls list
    start_urls = [url] 

    def parse(self, response):
        for article in response.css("article.product_pod"):
            yield {
                "price": article.css(".price_color::text").extract_first(), # or use .get() but getall() will return a list
                "title": article.css("h3 > a::attr(title)").extract_first()
            }
        import pdb; pdb.set_trace() # 調(diào)試

        #next = response.css(".next > a::attr(href)").extract_first()
        #selector可以直接傳入, 而且不需要寫attr(href) 因?yàn)閷?duì)于<a> element默認(rèn)解析attr的值
        next = response.css(".next > a")[0] 
        if next:
            #笨辦法是生成完整路徑再繼續(xù)yield Request
            #next_page = response.urljoin(next_page)
            #yield scrapy.Request(next_page, callback=self.parse)
            yield response.follow(next, self.parse)

假設(shè)我本地存下來到books.csv, 命令行是

scrapy runspider -o books.csv webscraping-srapy.py --pdb

最后說下,可以自己用scrapy shell 去做一些scraping, extract信息出來驗(yàn)證下,個(gè)人比后面用pdb效率高些:

scrapy shell 'http://books.toscrape.com/'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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