1. 程式人生 > >知網摘要作者資訊爬取和搜狗微信、搜狗新聞的爬蟲

知網摘要作者資訊爬取和搜狗微信、搜狗新聞的爬蟲

個人專案,只支援python3.

需要說明的是,本文中介紹的都是小規模資料的爬蟲(資料量<1G),大規模爬取需要會更復雜,本文不涉及這一塊。另外,程式碼細節就不過多說了,只將一個大概思路以及趟過的坑。

本文中涉及的阿布雲IP隧道及雲打碼平臺需要自己註冊,並在code中相應部分取消註釋。

需要在每個模組中建立output資料夾,才能使用,文件結構如下圖所示

搜狗微信文章抓取

  • 目標:在搜狗微信模組下搜尋關鍵詞的文章,抓取連結儲存文章標題,來源,時間,內容的內容
  • 採取的策略:selenium模擬搜尋,登陸掃碼採用手動掃描的模式,登陸後通過不同的關鍵詞進行搜尋,翻頁等操作。
  • 遇到的坑:
    1. SogouWechat這個庫只能抓到10個items(自己加入cookies也只能抓10個好像,反正我沒成功的抓多個)
    2. 登陸只想到手動掃描這一塊,沒有其他更好的方法
    3. 搜尋出來的文章連結時臨時性的,要及時request並儲存
    4. 在模擬翻頁操作的時候,建議模擬一下頁面滾動
    5. 網速不好的情況,要有sleep,要不然chrome會報錯

搜狗新聞抓取

  • 目標:在搜狗新聞搜尋中搜索關鍵,將所有新聞的標題,時間,內容儲存下來
  • 採取的策略:
    1. request.get關鍵詞,因為搜狗新聞就不涉及到cookies的問題,直接請求
    2. ip隧道代理請求(阿布雲代理)
    3. news的具體頁面,如果request獲取不到文字,用selenium抓
  • 遇到的坑:參照以上第三點。

知網摘要資訊抓取

  • 目標:指定文獻來源或者單位,抓所有的文獻的摘要,作者,時間等等
  • 採取的策略:
    1. selenium模擬登陸,得到搜尋頁面
    2. ajax抓包,構造請求傳送到伺服器
    3. 自動打碼(雲打碼,效果還可以)
    4. ip隧道代理
    5. 翻頁用request構造
  • 遇到的坑:
    1. 必須要登陸才能看到所有文獻
    2. 打碼失敗的話one more time
    3. 資料量有點多,及時儲存資料,我沒有用資料庫,我直接寫到檔案了

配置檔案、執行檔案講解

專案控制執行模組全部都是在setting檔案中修改配置的。

  • 抓取範圍配置

    注意,START和END是預設為””的,這是指不進行範圍限定。如果需要限定範圍,必須同時輸入START和END,不能只輸入一個,另一個為空。

    E.g. START = “20140101”
    END = “ 20180101”

    另外在抓知網的時候,由於知網只能瀏覽300頁,所以限定了時間範圍也只是在300頁內找時間範圍內的文獻。

  • 抓取源選擇

    DATA_FROM 是選擇抓取哪個模組的引數,只能在以下5個選項內選擇
    “sogou_news”, “sogou_wechat”, “cnki_journal”, “cnki_from”

    E.g. DATA_FROM = “sogou_wechat”

    另外抓取sogou_wechat的時候,剛開始會彈出二維碼介面,這是一個微信掃碼登陸搜狗的頁面,必須掃碼登陸,要不然只能訪問部分文章

  • 抓取關鍵詞

    KEYWORDS 指抓取 sogou_news、sogou_wechat需要抓的關鍵詞(知網搜尋的關鍵詞與這個無關),以list形式傳入

    E.g. KEYWORDS = [“高分一號”, “高分二號”, …]

    另外,搜狗需要精確匹配,程式已處理,只用在這個地方按照以上輸入就可以完成。

  • 知網期刊

    JOURNAL 指 在 DATA_FROM = “cnki_journal”情況下,需要搜尋的期刊,以list形式傳入。(建議每次傳入一到兩個期刊名,因為每次跑的時間過長,有情況及時發現處理)

    E.g. JOURNAL = [“測繪科學”, …]

  • 知網來源

    FROMS 指 在DATA_FROM = “cnki_from”情況下,需要搜尋的單位名稱,以list形式傳入。

    E.g. FROMS = [“武漢測繪院”, …]

    (建議一次性不超過50個)

  • IP、打碼配置

    一般不要動,除非要修改隧道和打碼配置

最後,程式碼在我的github上,有問題請郵件聯絡我。

另外,接受資料爬取業務或者諮詢。