之前一直在寫有關(guān)scrapy爬蟲的事情,今天我們看看使用scrapy如何把爬到的數(shù)據(jù)放在MySQL數(shù)據(jù)庫中保存。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比惠陽網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式惠陽網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋惠陽地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
為了顯示方便,我們把程序設(shè)計(jì)的簡單一點(diǎn),只是爬一頁的數(shù)據(jù)。我們今天選擇伯樂在線這個網(wǎng)站來爬取,只爬取第一頁的數(shù)據(jù)。
首先我們還是要啟動一個爬蟲項(xiàng)目,然后自己建了一個爬蟲的文件jobbole.py。我們先來看看這個文件中的代碼
# -*- coding: utf-8 -*- import io import sys import scrapy import re import datetime from scrapy.http import Request from urllib import parse from ArticleSpider.items import JobboleArticleItem, ArticleItemLoader from scrapy.loader import ItemLoader sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8') class JobboleSpider(scrapy.Spider): """docstring for JobboleSpider""" name = "jobbole" allowed_domain = ["blog.jobbole.com"] start_urls = ['http://blog.jobbole.com/all-posts/'] def parse(self, response): """ 1.獲取列表頁中的文章url """ # 解析列表匯中所有文章url并交給scrapy下載器并進(jìn)行解析 post_nodes = response.css("#archive .floated-thumb .post-thumb a") for post_node in post_nodes: image_url = post_node.css("img::attr(src)").extract_first("")# 這里取出每篇文章的封面圖,并作為meta傳入Request post_url = post_node.css("::attr(href)").extract_first("") yield Request(url = parse.urljoin(response.url, post_url), meta = {"front_image_url":image_url}, callback = self.parse_detail) def parse_detail(self, response): article_item = JobboleArticleItem() # 通過ItemLoader加載Item # 通過add_css后的返回值都是list型,所有我們再items.py要進(jìn)行處理 item_loader = ArticleItemLoader(item = JobboleArticleItem(), response = response) item_loader.add_css("title", ".entry-header h2::text") item_loader.add_value("url", response.url) # item_loader.add_value("url_object_id", get_md5(response.url)) item_loader.add_value("url_object_id", response.url) item_loader.add_css("create_date", "p.entry-meta-hide-on-mobile::text") item_loader.add_value("front_image_url", [front_image_url]) item_loader.add_css("praise_nums", ".vote-post-up h20::text") item_loader.add_css("comment_nums", "a[href='#article-comment'] span::text") item_loader.add_css("fav_nums", ".bookmark-btn::text") item_loader.add_css("tags", "p.entry-meta-hide-on-mobile a::text") item_loader.add_css("content", "div.entry") article_item = item_loader.load_item() print(article_item["tags"]) yield article_item pass