1. 程式人生 > >Python爬蟲新手教程: 知乎文章圖片爬取器

Python爬蟲新手教程: 知乎文章圖片爬取器

1. 知乎文章圖片爬取器之二部落格背景

昨天寫了知乎文章圖片爬取器的一部分程式碼,針對知乎問題的答案json進行了資料抓取,部落格中出現了部分寫死的內容,今天把那部分資訊調整完畢,並且將圖片下載完善到程式碼中去。

首先,需要獲取任意知乎的問題,只需要你輸入問題的ID,就可以獲取相關的頁面資訊,比如最重要的合計有多少人回答問題。 問題ID為如下標紅數字

編寫程式碼,下面的程式碼用來檢測使用者輸入的是否是正確的ID,並且通過拼接URL去獲取該問題下面合計有多少答案。

import requests
import re
import pymongo
import time
DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.zhihuone  # 準備插入資料

BASE_URL = "https://www.zhihu.com/question/{}"
def get_totle_answers(article_id):
    headers = {
        "user-agent": "需要自己補全 Mozilla/5.0 (Windows NT 10.0; WOW64)"
    }

    with requests.Session() as s:
        with s.get(BASE_URL.format(article_id),headers=headers,timeout=3) as rep:
            html = rep.text
            pattern =re.compile( '<meta itemProp="answerCount" content="(\d*?)"/>')
            s = pattern.search(html)
            print("查詢到{}條資料".format(s.groups()[0]))
            return s.groups()[0]

if __name__ == '__main__':

    # 用死迴圈判斷使用者輸入的是否是數字
    article_id = ""
    while not article_id.isdigit():
        article_id = input("請輸入文章ID:")

    totle = get_totle_answers(article_id)
    if int(totle)>0:
        zhi = ZhihuOne(article_id,totle)
        zhi.run()
    else:
        print("沒有任何資料!")

完善圖片下載部分,圖片下載地址在查閱過程中發現,存在json欄位的content中,我們採用簡單的正則表示式將他匹配出來。細節如下圖展示

編寫程式碼吧,下面的程式碼註釋請仔細閱讀,中間有一個小BUG,需要手動把pic3修改為pic2這個地方目前原因不明確,可能是我本地網路的原因,還有請在專案根目錄先建立一個imgs的資料夾,用來儲存圖片

    def download_img(self,data):
        ## 下載圖片
        for item in data["data"]:
            content = item["content"]
            pattern = re.compile('<noscript>(.*?)</noscript>')
            imgs = pattern.findall(content)
            if len(imgs) > 0:
                for img in imgs:
                    match = re.search('<img src="(.*?)"', img)
                    download = match.groups()[0]
                    download = download.replace("pic3", "pic2")  # 小BUG,pic3的下載不到

                    print("正在下載{}".format(download), end="")
                    try:
                        with requests.Session() as s:
                            with s.get(download) as img_down:
                                # 獲取檔名稱
                                file = download[download.rindex("/") + 1:]

                                content = img_down.content
                                with open("imgs/{}".format(file), "wb+") as f:  # 這個地方進行了硬編碼
                                    f.write(content)

                                print("圖片下載完成", end="\n")

                    except Exception as e:
                        print(e.args)

            else:
                pass
Python資源分享qun 784758214 ,內有安裝包,PDF,學習視訊,這裡是Python學習者的聚集地,零基礎,進階,都歡迎

執行結果為

然後在玩知乎的過程中,發現了好多好問題

相關推薦

Python爬蟲新手教程 文章圖片

1. 知乎文章圖片爬取器之二部落格背景 昨天寫了知乎文章圖片爬取器的一部分程式碼,針對知乎問題的答案json進行了資料抓取,部落格

Python爬蟲入門教程 6-100 蜂鳥網圖片之一

enter 第一步 {} status .... 一個 網站分析 except rep 1. 簡介 國慶假日結束了,新的工作又開始了,今天我們繼續爬取一個網站,這個網站為 http://image.fengniao.com/ ,蜂鳥一個攝影大牛聚集的地方,本教程請用來學習,

Python爬蟲入門教程 8-100 蜂鳥網圖片之三

asyncio esp 分享圖片 0.10 結果 .text win int lang 啰嗦兩句 前幾天的教程內容量都比較大,今天寫一個相對簡單的,爬取的還是蜂鳥,依舊采用aiohttp 希望你喜歡爬取頁面https://tu.fengniao.com/15/ 本篇教程還

Python爬蟲新手教程了6574篇文章,告訴你產品經理在看什麼!

作為網際網路界的兩個對立的物種,產品汪與程式猿似乎就像一對天生的死對頭;但是在產品開發鏈條上緊密合作的雙方,只有通力合作,才能更好

Python爬蟲新手教程微醫掛號網醫生資料抓

1. 寫在前面 今天要抓取的一個網站叫做微醫網站,地址為 https://www.guahao.com ,我們將通過python3

Python爬蟲新手教程手機APP資料抓 pyspider

1. 手機APP資料----寫在前面 繼續練習pyspider的使用,最近搜尋了一些這個框架的一些使用技巧,發現文件竟然挺難理解的

Python爬蟲新手教程Python分析了 7 萬款 App,萬萬沒想到

摘要:使用 Scrapy 爬取豌豆莢全網 70,000+ App,並進行探索性分析。 寫在前面:若對資料抓取部分不感興趣,可以直接

Python爬蟲新手教程實戰APP抓包,抖音的小姐姐等著我!

APP抓包 前面我們瞭解了一些關於 Python 爬蟲的知識,不過都是基於 PC 端瀏覽器網頁中的內容進行爬取。現在手機 App

Python爬蟲小實踐尋找失蹤人口,失蹤兒童信息並寫成csv文件,方便存入數據庫

python tor enc mini 執行 gem view 獲取 但是 前兩天有人私信我,讓我爬這個網站,http://bbs.baobeihuijia.com/forum-191-1.html上的失蹤兒童信息,準備根據失蹤兒童的失蹤時的地理位置來更好的尋找失蹤兒童,這

Python爬蟲入門教程 2-100 妹子圖網站

字典 註意 while import 我們 分鐘 基礎 便是 訪問 前言 從今天開始就要擼起袖子,直接寫Python爬蟲了,學習語言最好的辦法就是有目的的進行,所以,接下來我將用10+篇的博客,寫爬圖片這一件事情。希望可以做好。 為了寫好爬蟲,我們需要準備一個火狐瀏覽器,還

Python爬蟲教程簡書文章的抓與儲存

本文內容將與大家一起從簡書的文章頁面抓取文章標題、作者、釋出時間以及正文內容,並且將抓取到的這些資訊存入Excel表格中。本文對簡書文章的抓取僅為Python的學習交流,尊重作者著作權,不對抓取到的文章做其他用途。本文使用Chrome瀏覽器對頁面中需要抓取的內容進行分析。 首先我們從簡書

python爬蟲--模擬登錄

print url 開發 數字 pan tps 參數 content 開發者 1、處理登錄表單 處理登錄表單可以分為2步: 第一、查看網站登錄的表單,構建POST請求的參數字典; 第二、提交POST請求。 打開知乎登錄界面,https://www.zhi

PHP爬蟲百萬級別使用者資料與分析

這次抓取了110萬的使用者資料,資料分析結果如下: 開發前的準備 安裝Linux系統(Ubuntu14.04),在VMWare虛擬機器下安裝一個Ubuntu; 安裝PHP5.6或以上版本; 安裝MySQL5.5或以上版本; 安裝curl、pcntl擴充套件。 使

Python爬蟲視訊教程教你QQ音樂資料(實戰處理+資料視覺化)-劉宇宙-專題視訊課程...

Python爬蟲視訊教程:教你爬取QQ音樂資料(實戰處理+資料視覺化)—704人已學習 課程介紹        本視訊課程主要培訓Python爬蟲入門,資料分析及資料視覺化實戰內容,通過本課的學習,您可以在2小時左右掌握Python基礎程式設計的核心內容,實現Python在爬

Python爬蟲之模擬登陸

在chrome瀏覽器下抓取登陸過程的包(注意把Preserve log勾上): 表單的結構主要包括_xsrf, password, phone_num 我們要找到_xsrf的值,重新載入zhihu.

Python熱門話題

本例子是參考崔老師的Python3網路爬蟲開發實戰寫的 看網頁介面: 熱門話題都在 explore-feed feed-item的div裡面 原始碼如下: import requests from pyquery import PyQuery as pq url='https://www.

Python爬蟲入門教程 16-100 500px攝影師社群抓攝影師資料

寫在前面 今天要抓取的網站為 https://500px.me/ ,這是一個攝影社群,在一個攝影社群裡面本來應該爬取的是圖片資訊,可是我發現好像也沒啥有意思的,忽然覺得爬取一下這個網站的攝影師更好玩一些,所以就有了這篇文章的由來。 基於上面的目的,我找了了一個不錯的頁面 https://50

Python爬蟲(5) 借助搜狗搜索微信文章

public 文章內容 bsp get python爬蟲 header 正則表達式 exce 3.0 借助搜狗搜索爬取微信文章 from urllib import request as r import re as e from urllib

自學python爬蟲(四)Requests+正則表示式貓眼電影

前言 學了requests庫和正則表示式之後我們可以做個簡單的專案來練練手咯!先附上專案GitHub地址,歡迎star和fork,也可以pull request哦~ 地址:https://github.com/zhangyanwei233/Maoyan100.git 正文開始哈哈哈

python爬蟲系列(3.4-使用xpath和lxml伯樂線上)

一、爬取的程式碼 1、網站地址 2、具體實現程式碼 import requests from lxml import etree class JobBole(object):     def __init__(self):     &