一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

使用 Python 爬取簡書網(wǎng)的所有文章

 AirPython 2021-10-28

第一時間獲取 Python 技術(shù)干貨!

閱讀文本大概需要 6 分鐘。







01
抓取目標(biāo)

我們要爬取的目標(biāo)是「 簡書網(wǎng) 」

打開簡書網(wǎng)的首頁,隨手點(diǎn)擊一篇文章進(jìn)入到詳情頁面。

我們要爬取的數(shù)據(jù)有:作者、頭像、發(fā)布時間、文章 ID 以及文章內(nèi)容。

02
準(zhǔn)備工作

在編寫爬蟲程序之前,我都是先對頁面進(jìn)行簡單分析,然后指定爬取思路。

由于我們爬取簡書網(wǎng)所有的文章數(shù)據(jù),所以考慮使用「 CrawlSpider 」來對整個網(wǎng)站進(jìn)行爬取。

首先使用 Scrapy 創(chuàng)建一個項目和一個爬蟲

# 打開 CMD 或者終端到一個指定目錄
# 新建一個項目
scrapy startproject jianshu_spider

cd jianshu_spider

# 創(chuàng)建一個爬蟲
scrapy genspider -t crawl jianshu "jianshu.com"

爬取的數(shù)據(jù)準(zhǔn)備存儲到 Mysql 數(shù)據(jù)庫中,因此需要提前建立好數(shù)據(jù)庫和表。

03
爬取思路

首先,我們我們檢查首頁頁面文章列表每一項的 href 屬性、文章詳情頁面的地址、詳情頁面推薦文章中的 href 屬性。

可以獲取出規(guī)律,每一篇文章的地址,即 URL 是由.../p/文章id/... 構(gòu)成,其中文章 ID 是由小寫字母 a-z 或者 0-9 的 12 位數(shù)字構(gòu)成,因此 Rule 構(gòu)成如下:

/p/[0-9a-z]{12}
04
代碼實(shí)現(xiàn)

第一步是指定開始爬取的地址和爬取規(guī)則。

allowed_domains = ['jianshu.com']
    start_urls = ['https://www.jianshu.com/']
    rules = (
        # 文章id是有12位小寫字母或者數(shù)字0-9構(gòu)成
        Rule(LinkExtractor(allow=r'.*/p/[0-9a-z]{12}.*'), callback='parse_detail', follow=True),
    )

第二步是拿到下載器下載后的數(shù)據(jù) Response,利用 Xpath 語法獲取有用的數(shù)據(jù)。這里可以使用「 Scrapy shell url 去測試數(shù)據(jù)是否獲取正確。

# 獲取需要的數(shù)據(jù)
 title = response.xpath('//h1[@class="title"]/text()').get()
 author = response.xpath('//div[@class="info"]/span/a/text()').get()
 avatar = self.HTTPS + response.xpath('//div[@class="author"]/a/img/@src').get()
 pub_time = response.xpath('//span[@class="publish-time"]/text()').get().replace("*""")
 current_url = response.url
 real_url = current_url.split(r"?")[0]
 article_id = real_url.split(r'/')[-1]
 content = response.xpath('//div[@class="show-content"]').get()

然后構(gòu)建 Item 模型用來保存數(shù)據(jù)。

import scrapy

# 文章詳情Item
class ArticleItem(scrapy.Item):
    title = scrapy.Field()
    content = scrapy.Field()
    # 文章id
    article_id = scrapy.Field()
    # 原始的url
    origin_url = scrapy.Field()

    # 作者
    author = scrapy.Field()

    # 頭像
    avatar = scrapy.Field()

    # 發(fā)布時間
    pubtime = scrapy.Field()

第三步是將獲取的數(shù)據(jù)通過 Pipline 保存到數(shù)據(jù)庫中。

# 數(shù)據(jù)庫連接屬性
db_params = {
            'host''127.0.0.1',
            'port'3306,
            'user''root',
            'password''root',
            'database''jianshu',
            'charset''utf8'
}

# 數(shù)據(jù)庫【連接對象】
self.conn = pymysql.connect(**db_params)
# 構(gòu)建游標(biāo)對象
self.cursor = self.conn.cursor()

# sql 插入語句
self._sql = """
          insert into article(id,title,content,author,avatar,pubtime,article_id,origin_url) 
        values(null,%s,%s,%s,%s,%s,%s,%s)
"
""

# 執(zhí)行 sql 語句
self.cursor.execute(self._sql, (
            item['title'], item['content'], item['author'], item['avatar'], item['pubtime'], item['article_id'],
            item['origin_url']))

# 插入到數(shù)據(jù)庫中
self.conn.commit()

# 關(guān)閉游標(biāo)資源
self.cursor.close()











05
爬取結(jié)果

執(zhí)行命令「 scrapy crawl jianshu」 運(yùn)行爬蟲程序。

注意設(shè)置 settings.py 中延遲 DOWNLOAD_DELAY管道ITEM_PIPELINES 保證數(shù)據(jù)能正常寫入到數(shù)據(jù)庫中。

最后查看數(shù)據(jù)庫,發(fā)現(xiàn)數(shù)據(jù)能正常寫入到表中。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美成人高清在线播放| 欧美一区二区三区不卡高清视| 国产精品推荐在线一区| 偷拍美女洗澡免费视频| 日本久久精品在线观看| 日韩精品在线观看一区| 嫩呦国产一区二区三区av| 国产亚洲欧美自拍中文自拍| 国产精品人妻熟女毛片av久| 一区二区三区日韩中文| 欧美精品久久一二三区| 精品丝袜一区二区三区性色| 不卡一区二区高清视频| 国产精品一级香蕉一区| 中文字幕一区二区久久综合| 欧美一区二区日韩一区二区| 欧美日韩综合在线第一页| 日本福利写真在线观看| 国产一级二级三级观看| 欧美午夜一区二区福利视频| 国产乱淫av一区二区三区| 成人免费高清在线一区二区| 成年人免费看国产视频| 91超精品碰国产在线观看| 欧美成人欧美一级乱黄| 国产一区二区三区精品免费| 日本午夜免费观看视频| 日韩精品毛片视频免费看| 国产欧美一区二区久久| 粉嫩国产一区二区三区在线| 久久中文字人妻熟女小妇| 欧美日韩视频中文字幕| 国产精品熟女乱色一区二区| 国产级别精品一区二区视频| 又大又紧又硬又湿又爽又猛| 亚洲精品中文字幕无限乱码| 一区二区三区18禁看| 色哟哟国产精品免费视频| 国产精品偷拍一区二区| 久热青青草视频在线观看| 国产精品欧美激情在线播放|