python3之微信文章爬蟲

来源:http://www.cnblogs.com/AngelYuFan/archive/2017/07/11/7152760.html
-Advertisement-
Play Games

前提: python3.4 windows 作用:通過搜狗的微信搜索介面http://weixin.sogou.com/來搜索相關微信文章,並將標題及相關鏈接導入Excel表格中 說明:需xlsxwriter模塊,另程式編寫時間為2017/7/11,以免之後程式無法使用可能是網站做過相關改變,程式較 ...


前提:

python3.4

windows

作用:通過搜狗的微信搜索介面http://weixin.sogou.com/來搜索相關微信文章,並將標題及相關鏈接導入Excel表格中

說明:需xlsxwriter模塊,另程式編寫時間為2017/7/11,以免之後程式無法使用可能是網站做過相關改變,程式較為簡單,除去註釋40多行。

正題:

思路:打開初始Url  --> 正則獲取標題及鏈接  -->  改變page迴圈第二步  -->  將得到的標題及鏈接導入Excel

爬蟲的第一步都是先手工操作一遍(閑話)

進入上面提到的網址,如輸入:“圖片識別”,搜索,網址變為“http://weixin.sogou.com/weixin?type=2&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&ie=utf8&s_from=input&_sug_=n&_sug_type_=1&w=01015002&oq=&ri=4&sourceid=sugg&sut=0&sst0=1499778531195&lkt=0%2C0%2C0&p=40040108”標紅為重要參數,type=1時是搜索公眾號,暫且不管,query=‘搜索關鍵詞’,關鍵詞已經被編碼,還有一個隱藏參數page=1

當你跳到第二頁時可以看到“http://weixin.sogou.com/weixin?oq=&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&_sug_type_=1&sut=0&lkt=0%2C0%2C0&s_from=input&ri=4&_sug_=n&type=2&sst0=1499778531195&page=2&ie=utf8&p=40040108&dp=1&w=01015002&dr=1”

好了,url可以得到了

1 url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page) 

search是要搜索的關鍵詞,用quote()編碼即可插入

 

1 search = urllib.request.quote(search)

 

page是用來迴圈的

1 for page in range(1,pagenum+1):
2     url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)

完整的url已經得到了,接下來訪問url,獲得其中的數據(創建opener對象,添加header())

1 import urllib.request
2     header = ('User-Agent','Mozilla/5.0')
3     opener = urllib.request.build_opener()
4     opener.addheaders = [header]
5     urllib.request.install_opener(opener)
6     data = urllib.request.urlopen(url).read().decode()

得到頁面內容,採用正則表達獲取相關數據

1 import re
2     finddata = re.compile('<a target="_blank" href="(.*?)".*?uigs="article_title_.*?">(.*?)</a>').findall(data)
3     #finddata = [('',''),('','')]

通過正則獲取的數據中存在干擾項(鏈接:‘amp;’)和無關項(標題:'<em><...><....></em>'),用replace()解決

1 title = title.replace('<em><!--red_beg-->','')
2 title = title.replace('<!--red_end--></em>','')
1 link = link.replace('amp;','')

將處理後的標題和鏈接保存在列表中

1 title_link.append(link)
2 title_link.append(title)

如此搜索的標題和鏈接都得到了,接下來導入Excel

先創建Excel

1 import xlsxwriter
2 workbook = xlsxwriter.Workbook(search+'.xlsx')
3 worksheet = workbook.add_worksheet('微信')

將title_link中的數據導入Excel

1 for i in range(0,len(title_link),2):
2     worksheet.write('A'+str(i+1),title_link[i+1])
3     worksheet.write('C'+str(i+1),title_link[i])
4 workbook.close()

完整代碼:

 1 '''
 2 python3.4 + windows
 3 羽凡-2017/7/11-
 4 用於搜索微信文章,保存標題及鏈接至Excel中
 5 每個頁面10秒延遲,防止被限制
 6 import urllib.request,xlsxwriter,re,time
 7 '''
 8 import urllib.request
 9 search = str(input("搜索微信文章:"))
10 pagenum = int(input('搜索頁數:'))
11 import xlsxwriter
12 workbook = xlsxwriter.Workbook(search+'.xlsx')
13 search = urllib.request.quote(search)
14 title_link = []
15 for page in range(1,pagenum+1):
16     url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)
17     import urllib.request
18     header = ('User-Agent','Mozilla/5.0')
19     opener = urllib.request.build_opener()
20     opener.addheaders = [header]
21     urllib.request.install_opener(opener)
22     data = urllib.request.urlopen(url).read().decode()
23     import re
24     finddata = re.compile('<a target="_blank" href="(.*?)".*?uigs="article_title_.*?">(.*?)</a>').findall(data)
25     #finddata = [('',''),('','')]
26     for i in range(len(finddata)):
27         title = finddata[i][1]
28         title = title.replace('<em><!--red_beg-->','')
29         title = title.replace('<!--red_end--></em>','')
30         try:
31             #標題中可能存在引號
32             title = title.replace('&ldquo;','"')
33             title = title.replace('&rdquo;','"')
34         except:
35             pass
36         link = finddata[i][0]
37         link = link.replace('amp;','')
38         title_link.append(link)
39         title_link.append(title)
40     print('第'+str(page)+'頁')
41     import time
42     time.sleep(10)
43 worksheet = workbook.add_worksheet('微信')
44 worksheet.set_column('A:A',70)
45 worksheet.set_column('C:C',100)
46 bold = workbook.add_format({'bold':True})
47 worksheet.write('A1','標題',bold)
48 worksheet.write('C1','鏈接',bold)
49 for i in range(0,len(title_link),2):
50     worksheet.write('A'+str(i+1),title_link[i+1])
51     worksheet.write('C'+str(i+1),title_link[i])
52 workbook.close()
53 print('導入Excel完畢!')

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 本文主要是筆者小結 WWDC2017 中 "《What's New in Swift》" 的 Session ,其中也摻雜了些《What’s New in Foundation》,僅作記錄。 下麵步入主題。 私有訪問控制("Private" Access Control) "SE 0169" ...
  • 這張圖我相信基本上對JVM有點接觸的都應該很熟悉,可以說這是JVM入門的第一課。其中的“堆”和“虛擬機棧(棧)”更是耳熟能詳。下麵將圍繞這張圖對JVM的運行時數據區做一個簡單介紹。 程式計數器(Program Counter Register) 這和電腦操作系統中的程式計數器類似,在電腦操作系統 ...
  • 第一章 C/C++程式基礎 一、一般賦值語句: 考察一般賦值語句的概念和方法。 1.程式: 2.答案: 3.分析: 代碼行.12中的“&”表示位與計算,即將y和z轉換為二進位數字10和10,進行位與計算。1&1=1,其餘都是0,故結果為二進位10。所以答案為2,x=2。 代碼行.16中的“|”表示位 ...
  • 跨域概念 跨域是瀏覽器遵循同源策略,對頁面腳本的安全限制,不允許Javascript請求不同域的數據。 跨域的本質就是要解決同源策略的限制!假如有地址 http://www.example1.com:8080/a.jsp,如下請求是不符合同源策略限制的: 跨域之JSONP JSONP跨域是利用<sc ...
  • python列表操作——增 append:追加一條數據到列表的最後 python列表操作——刪 如果當pop()中帶入了參數,其效果等同於del python列表操作——改 python列表操作——查 當下標為負數時,則從右邊開始取 列表其他操作: ...
  • 在ARMv6T2以及ARMv7架構擴展了Thumb指令集,其中加入了IT指令,進一步增強了代碼的緊湊性。 Thumb中有一個比較有意思的指令——IT,這條指令用於根據指定的條件來執行後面相繼的四條指令。當然,Thumb-2中大部分算術邏輯指令都含有帶條件執行的特征,不過Thumb-2是32位的。如果 ...
  • 本文主要記錄網路編程的一些基礎知識,學了前班部分,對專業術語有些蒙,但是,收貨也是很多很多的。觀察了自己電腦的進程,查找其他網路地址的IP,對互聯網的層次關係有了更深一步的瞭解。下麵多是概念的摘錄,有時間我還要回來再看看,加深理解。 1 網路編程的基礎知識 1.1 網路協議 規定了電腦之間連接的 ...
  • 使用java8 的lanmbe表達式時,使用java1.8編譯,則會報錯需要在pom.xml的中添加 org.apache.maven.plugins maven-compiler-plugin 2.3.2 ... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...