求問新浪微博爬蟲怎麼寫啊?

大四學生一枚,想用Python語言寫一個新浪微博的爬蟲程序,已經完成了模擬登錄部分,不知道接下來該怎麼辦呢?想用正則表達式匹配微博內容進行爬取,但是查看網頁源代碼發現根本看不到內容啊,求助求助!


幾個微博爬蟲開源項目:

SinaSpider-

基於scrapy和redis的分散式微博爬蟲。SinaSpider主要爬取新浪微博的個人信息、微博數據、關注和粉絲。資料庫設置
Information、Tweets、Follows、Fans四張表。爬蟲框架使用Scrapy,使用scrapy_redis和Redis實現分布
式。此項目實現將單機的新浪微博爬蟲重構成分散式爬蟲。

sina_reptile-
這是一個關於sina微博的爬蟲,採用python開發,並修改了其sdk中的bug,採用mongodb存儲,實現了多進程爬取任務。
獲取新浪微博1000w用戶的基本信息和每個爬取用戶最近發表的50條微博,使用python編寫,多進程爬取,將數據存儲在了mongodb中

sina_weibo_crawler- 基於urlib2及beautifulSoup實現的微博爬蟲系統。利用urllib2加beautifulsoup爬取新浪微博,資料庫採用mongodb,原始關係以txt文件存儲,原始內容以csv形式存儲,後期直接插入mongodb資料庫

sina-weibo-crawler-方便擴展的新浪微博爬蟲。WCrawler.crawl()函數只需要一個url參數,返回的用戶粉絲、關注裡面都有url,可以向外擴展爬取,並且也可以自定義一些過濾規則。

weibo_crawler-基於Python、BeautifulSoup、mysql微博搜索結果爬取工具。本工具使用模擬登錄來實現微博搜索結果的爬取。

SinaMicroblog_Creeper-Spider_VerificationCode- 新浪微博爬蟲,獲得每個用戶和關注的,粉絲的用戶id存入xml文件中,BFS,可以模擬登陸,模擬登陸中的驗證碼會抓取下來讓用戶輸入。


題主看不到想要的內容,是因為PC端微博的源碼都放在

FM.view((.*))

這個正則表達式所包含的內容中。微博頁面的解析會包含大量細緻的工作。我看以上的答主要麼是使用移動版要麼甚至建議使用phantomjs,其實PC端也是可以抓取的,工作量比較大。為此,我寫了一個分散式的微博爬蟲,幫助大家採集微博數據

項目地址:ResolveWang/WeiboSpider


不請自答 知乎首答

作為一個剛剛實現了新浪微博爬蟲程序的小白,我覺得我還是可以答一下的

我的爬蟲最終效果是:

1,輸入用戶的id,將該用戶的所有文字微博儲存在一個.txt文件中;

2,將該用戶在微博中發表的圖片按照時間順序存儲在本地文件夾中。

我大致參考了 語亮的經驗:用Python寫一個簡單的微博爬蟲 感謝

我用的是python3.5 版本,說下大致的思路吧:

準備工作:1,要先確定目標,爬取社交網站建議使用手機版的客戶端,因為PC版的網站使用的是動態載入技術,對於習慣靜態網站爬取的人(特別是爬蟲新手)來說可能非常不方便,所以我們首先鎖定移動端網站:http://weibo.cn/(好像是這個吧),嗯就是它了。2,自動模擬登錄微博需要用戶的cookies;先手動登錄一次微博,在chrome的開發者工具中可以很方便的抓取cookies。3,要獲取目標用戶的id,這個很簡單了,拿我的女神 @子望為例 :如圖,進入目標的微博主頁,紅圈裡的數字就是id:

4,下載相關第三方庫,lxml和BeautifulSoup備用。

切入正題,動用python這個強大的工具把微博扒下來:

首先,確定字元格式,模擬登錄微博,輸入目標用戶id(避免亂碼)

importlib.reload(sys)

#sys.setdefautencoding("utf-8") 在python3中已經沒有該方法
默認utf-8

if(len(sys.argv)&>=2):
user_id=(int)(sys.argv[1])
else:
user_id=(int)(input(u"請輸入用戶id"))

cookie={"Cookie":"##填寫你的cookies##"}

url="http://weibo.cn/u/%d?filter=1page=1"%user_id

然後,藉助lxml庫把原網站的html給copy下來,計算要爬取的頁碼數,如下:

html = requests.get(url, cookies = cookie).content
selector = etree.HTML(html)
pageNum=(int)(selector.xpath(u"//input[@name="mp"]")[0].attrib["value"])
result="" #儲存數據備用
urllist_set=set()
word_count=1
image_count=1

print(u"爬蟲準備就緒...")

最後就是爬取內容並輸出保存了

for page in range(1,pageNum+1):
url="http://weibo.cn/u/%d?filter=1page=%d"%(user_id,page)
lxml=requests.get(url,cookies=cookie).content

selector=etree.HTML(lxml)
content=selector.xpath("//span[@class="ctt"]")
for each in content:
text=each.xpath("string(.)")
if word_count&>=4:
text="%d:"%(word_count-3)+text+"

"
else:
text=text+"

"
result=result+text
word_count+=1

soup=BeautifulSoup(lxml,"lxml")
urllist=soup.find_all("a",href=re.compile(r"^http://weibo.cn/mblog/oripic",re.I))
first=0
for imgurl in urllist:
urllist_set.add(requests.get(imgurl["href"],cookies=cookie).url)
image_count+=1

fo=open(u"/Users/wanghuan/AppData/Local/Programs/Python/Python35/爬蟲/%s"%user_id,"w" ,encoding="utf-8", errors="ignore")
fo.write(result)
word_path=os.getcwd()+"%d"%user_id
print(u"文字微博爬取完畢")
fo.close()
link=""
fo2=open("/Users/wanghuan/AppData/Local/Programs/Python/Python35/爬蟲/%s_imageurls"%user_id,"w")
for eachlink in urllist_set:
link=link+eachlink+"
"
fo2.write(link)
print(u"圖片鏈接爬取完畢")
fo2.close()
if not urllist_set:
print(u"圖片不存在")
else:
image_path=os.getcwd()+"weibopicture"
if os.path.exists(image_path) is False:
os.mkdir(image_path)
x=1
for imgurl in urllist_set:
temp=image_path+"/%s.jpg"%x
print(u"正在下載第%s張圖片"%x)
try:
urllib.request.urlretrieve(urllib.request.urlopen(imgurl).geturl(),temp)
except:
print(u"圖片下載失敗:%s"%imgurl)
x+=1

print(u"原創微博爬取完畢,共%d條,保存路徑%s"%(word_count-4,word_path))
print(u"原創微博圖片爬取完畢,共%d張,保存路徑%s"%(image_count-1,image_path))

在程序根目錄下面,還生成了一個userid_imageurls的文本文件,裡面存儲了爬取的所有圖片的下載鏈接,方便手動下載哪些下載失敗的圖片。

然後在文件夾中就可以打開查看了:

我修改後的源代碼在這裡:python-web-spider/新浪微博爬取最終版 at master · RobortHuan/python-web-spider · GitHub

最後總結一下,還是lxml好用,直接把html抓取下來可以直接做網頁源代碼的分析;此外,沒有大規模地用正則表達式;速度據說比urllib要快不少,用python做爬蟲還是比較簡單的。

第一次認真答題,時間比較倉促,有一些沒說清楚和排版沒排好的請見諒,歡迎大家的指正!

以上!


Python 爬蟲如何獲取 JS 生成的 URL 和網頁內容? - JavaScript


不追求效率的話可以直接phantomjs渲染出最終源代碼保存再搞


推薦閱讀:

為什麼新浪微博會偷偷地讓我關注一些我從沒關注過的陌生賬號?
如何看待目前在微博上流傳的「新浪微博一路走好」這組漫畫?
為什麼神會懲罰不信主的人?
如何評價微博用戶 打假少年?
如何看待奚夢瑤微博評論眾多的明星熱評?

TAG:新浪微博 | Python3x | 爬蟲計算機網路 |