1. 程式人生 > >用BeautifulSoup,urllib,requests寫twitter爬蟲(1)

用BeautifulSoup,urllib,requests寫twitter爬蟲(1)

在github上找到了一個twitter的爬蟲,試了下,修改了其中一個有關編碼的問題,可以抓取一定數量的twitter

程式碼如下

from bs4 import BeautifulSoup, NavigableString
from urllib2 import urlopen

#Note: must be a public profile
print "Twitter username:"
user = raw_input()

endpoint = "https://twitter.com/%s"

f = urlopen(endpoint % user)
html = f.read()
f.close()

soup = BeautifulSoup(html, 'html.parser')

tweets = soup.find_all('strong', {'class': 'fullname js-action-profile-name show-popup-with-id'})

for i in range(0,len(tweets)):
    user = tweets[i].contents[0]

    action_tag = soup('span', {'class': 'username js-action-profile-name'})
    show_name = action_tag[i].contents[1].contents[0]

    twit_text = soup('p', {'class': 'js-tweet-text'})

    message = ""
    for nib in twit_text[i]:
        if isinstance(nib, NavigableString):
            message += nib
        else:
            message += nib.text

    print user, "@", i, show_name, message.replace(u'\xa0', u'')

下面進行解釋:

第1行:從bs4中匯入兩個類。BeautifulSoup中儲存整個html文件並且可以在其中搜索,NatigableString儲存html中特定的text,但也支援某些搜尋的功能。

第2行:從urllib2中匯入urlopen方法,用於傳送請求到url並返回html文件

第5-6行:輸入要抓取的使用者名稱

第8行:輸入twitter網址

第10-12行:生成最終的目標url並使用urlopen方法,將下載的html文件讀取到html變數中,然後關閉物件。urlopen.read只能使用一次,第二次再呼叫此方法時返回空值,所以也就相當於只能迭代一次的迭代器。

第14行:根據文件生成用於檢索的BeautifulSoup物件。

第16行:找到所有class屬性為 'fullname....with-id' 的strong標籤,每個strong標籤都唯一對應一條推文,因為實際上這就是每條推文上作者的姓名,當然這樣提取出來的不僅包括使用者發表的推文,也包括了使用者轉推的推文。

第18行:對所有這樣的標籤進行遍歷

迴圈內:

第19行:將tweets中當下元素的內容賦值為user

第21行:提取出所有的動作發出者,這裡不僅能提取出傳送推文的作者,也能提取出轉推者,在twitter頁面上,就是一個使用者名稱前加上'@'的標籤,這行其實應該放到迴圈外,在這裡重複了。

第22行:show_name提取出當下推文傳送者的姓名unicode字串

第24行:提取出推文內容,這行也應該放到迴圈外,

第26-31行:將當下推文的從不同的string或tag中抽取並粘合在一起,第28行中,如果判斷為真,那說明此元素就是text(因為實質上NavigableString就是多了一些功能的string物件),如果為假,則說明這只是一個包含text的tag。

第33行:依次輸出傳送此條推文的動作發出者,原作者,以及推文內容。此處如果不把 u‘\xa0’ 替換為空的話,會報UnicodEncodeError,但現在看替換成這樣並不影響輸出推文內容,所以這個 \xa0 我覺得有可能是個檔案頭之類的,這個錯誤我在程式設計過程中出現過好幾次,一直沒有徹底弄明白過,只能先用這種方法把問題避開。這個方法源於另一篇文章http://blog.csdn.net/jianhong1990/article/details/8061328。感謝此作者為我節省了很多時間。

參考:

相關推薦

BeautifulSoup,urllib,requeststwitter爬蟲(1)

在github上找到了一個twitter的爬蟲,試了下,修改了其中一個有關編碼的問題,可以抓取一定數量的twitter 程式碼如下 from bs4 import BeautifulSoup, NavigableString from urllib2 import url

從零開始Python爬蟲 --- 1.1 requests庫的安裝與使用

從零開始寫Python爬蟲 --- 1.1 requests庫的安裝與使用     先來說說爬蟲的 原理:爬蟲本質上是模擬人瀏覽資訊的過程,只不過他通過計算機來達到快速抓取篩選資訊的目的。所以我們想要寫一個爬蟲,最基本的就是要將我們需要抓取資訊的網頁原

Python和Pygame遊戲第1

千萬 from 我們 win get() 適合 音頻 idt 產品 Pygame的歷史 ?? Pygame是一個利用SDL庫的寫就的遊戲庫,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛寫的,據說他為了讓Loki(致

從零開始Python爬蟲 --- 1.6 爬蟲實踐: DOTA'菠菜'結果查詢

說起來目錄裡面本來是準備雙色球資訊查詢的,但是我一點都不懂這個啊,恰好身邊有個老賭棍,沉迷Dota飾品交易,俗稱 “菠菜”。老賭棍啊,老賭棍,能不能不要每天我說天台見。。。 這次的爬蟲功能十分的簡答,主要目的是延展一下bs4庫的使用。 目標分析: 看一看網站裡的資訊是怎麼排列的: 和上一次一樣 我們

1.0 -Python爬蟲-Urllib/Requests

0 爬蟲準備工作 參考資料 python網路資料採集, 圖靈工業出版 精通Python爬蟲框架Scrapy, 人民郵電出版社 Python3網路爬蟲 Scrapy官方教程 前提知識 url http協議 web前端,h

1.1-Python爬蟲案例演示urllib/requests

Python爬蟲urllib/requests 1.urllib模組 一個簡單的Python爬蟲框架-案例v1 from urllib import request ''' 使用urllib.request請求一個網頁內容,並把內容打印出來 ''' if __name__ == '__main__'

爬蟲小試--python中requestsurllib模塊爬取圖片

源碼 一個 -- .text 本地 requests style intel 加載 今天突發奇想小試爬蟲,獲取一下某素材站一些圖片 實現步驟如下: import re import requests from urllib import request import os

BeautifulSoup + selenium 簡單的爬蟲程式設計

我們以抓取選股寶網頁裡面的利好以及利空對應的股票名稱為例子1、建立專案        開啟PyCharm2、新建py檔案3、程式設計    3.1 建立檔案函式# 建立檔案函式 (檔案路徑,檔名) def establish_file(file_path, file_name

python零基礎爬蟲--編寫第一個網絡爬蟲

等待 客戶端瀏覽器 身份驗證 1.2 不存在 ssp 地址 執行c ade 首先要說明的是,一下代碼是在python2.7版本下檢測的 一.最簡單的爬蟲程序 --下載網頁 import urllib2 request=urllib2.Request("http://www.

Python3爬蟲(1)_使用Urllib進行網絡爬取

onkeydown role dism 百度 parse format enter art 百度百科 網絡爬蟲 又被稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者,是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的

Python網路爬蟲》第一章踩坑

教程使用環境為pyhon2.x,使用python3.x進行學習時遇到一些坑,記錄下解決辦法。 由於python2.x中的urllib2模組在3.x中被整合到了urllib模組中,教程中涉及urllib2的部分的程式碼需調整 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; f

500 Lines or Less | A Web Crawler With asyncio Coroutines:協程web爬蟲

1 def fetch(url): 2 sock = socket.socket() 3 sock.connect(('xkcd.com', 80)) 4 request = 'GET {} HTTP/1.0\r\nHost: xkcd.com\r\n\r\n'.form

常常出不阻塞的爬蟲?分享5個Python編寫非阻塞web爬蟲的方法 python

常常寫出不阻塞的爬蟲?分享5個用Python編寫非阻塞web爬蟲的方法 大家在讀爬蟲系列的帖子時常常問我怎樣寫出不阻塞的爬蟲,這很難,但可行。通過實現一些小策略可以讓你的網頁爬蟲活得更久。那麼今天我就將和大家討論這方面的話題。 使用者代理 你需要關心的第一件事是設定使用者代理。pytho

Python 網路爬蟲 第2版

內容簡介 暢銷的 Python 網路爬蟲開發實戰圖書全新升級版,上一版年銷量近 40000 冊。 針對 Python 3.6 版本編寫。 Internet 上包含了許多有用的資料,其中大部分是可以免費公開訪問的。但是,這些資料不容易使用,它們內嵌在網站的架構和樣式中,在提取時也需要多加小心。網

輸入一行字元分別統計出其中英文字母、空格、數字和其他字元的個數。(c++語言編寫程式)【的第1篇部落格,很高興

#include<stdio.h> int main() { char ch; //定義ch為字元型變數 int a=0,b=0,c=0,d=0; //定義a,b,c,d為整型變數並賦初值 while(scanf("%c",&ch),ch!=’\n’) //輸入字元直到c

開始一個爬蟲1

net 興趣 可能 pytho pycha 備註 其他 nco 編碼方式 因為是作為筆記寫的,所以會很啰嗦,而且代碼不會全部展示。。 首先,你要確定一個目標,就是你要爬的網站。我選的就不說了,比較邪惡,需要18歲以下的小僵屍繞路。 選好之後,構思下整個腳本的大致結構。 1.

爬蟲1-urllib,Request,opener,proxy

一, urllib (直接請求網址) from urllib import request with request.urlopen('http://www.runoob.com') as f: if f.status == 200: #200 f.

常常出不阻塞的爬蟲?分享5個Python編寫非阻塞web爬蟲的方法 python

常常寫出不阻塞的爬蟲?分享5個用Python編寫非阻塞web爬蟲的方法 大家在讀爬蟲系列的帖子時常常問我怎樣寫出不阻塞的爬蟲,這很難,但可行。通過實現一些小策略可以讓你的網頁爬蟲活得更久。那麼今天我就將和大家討論這方面的話題。 使用者代理 你需要關心的第一件事是

Python網路爬蟲》下載

2018年11月01日 13:27:27 qq_43576443 閱讀數:5 標籤: 程式設計 資料

python手記(五):requests爬蟲(一):爬蟲簡介

上次將python的圖片處理庫簡單寫了下,也就基本處於玩的地步。哈哈,蠻嘲諷的,這次我嘗試著寫下爬蟲,有多深肯定是不敢保證的,畢竟能力有限。但是我會盡量去從原理上把爬蟲的東西說明白一些。讓大家有個直觀的認識,最後能自己寫出個簡單的定向小爬蟲,爬個小說,爬個圖片,爬首歌曲什麼的