新浪微博粉絲爬蟲 wap站只能爬取20頁

2021-07-26 22:35:58 字數 3552 閱讀 8161

由上圖可見:微博已經視粉絲分布為商業機密,故爬取難度越來越大。無論web上爬,還是手機上爬,均受限。

兩種方式:手動爬+微博api爬。

本文展示手動爬,以李易峰的粉絲分布為基礎,只能爬取20頁,原始碼如下

# encoding=utf-8

import random

import json

import base64

import requests

from lxml import etree

import re

import pymongo

"""輸入你的微博賬號和密碼,可去**買,一元七個。

建議買幾十個,微博限制的嚴,太頻繁了會出現302轉移。

或者你也可以把時間間隔調大點。

"""myweibo = [

# ,,

#, ]

host=""

scrawl_id=set()

cookies =

def getcookies(weibo):

""" 獲取cookies """

loginurl = r''

for elem in weibo:

account = elem['no']

password = elem['psw']

username = base64.b64encode(account.encode('utf-8')).decode('utf-8')

postdata =

session = requests.session()

r = session.post(loginurl, data=postdata)

jsonstr = r.content.decode('gbk')

#print 'jsonstr=',jsonstr

info = json.loads(jsonstr)

#print 'info=',info

if info["retcode"] == "0":

print "get cookie success!( account:%s )" % account

cookie = session.cookies.get_dict()

else:

print "failed!( reason:%s )" % info['reason']

return cookies

def weibologin(id):

cookies = getcookies(myweibo)

print "get cookies finish!( num:%d)" % len(cookies)

cookie=random.choice(cookies)

rich_url="/%s/fans" % id

r=requests.post(rich_url,cookies=cookie)

return r.content

def url_to_page(url):

cookie=random.choice(cookies)

r=requests.post(url,cookies=cookie)

if(r.status_code==requests.codes.ok):

return r.content

else:

return r.status_code

def mongoinit():

clinet = pymongo.mongoclient("localhost", 27017)

db = clinet["sina_by_fw"]

fans_db = db["fans"]

print"mongodbpipleline_init() finish****"

return fans_db

fans_cities=

page_count=0

fans_count=0

fans_db=mongoinit()

def parse_for_fans(page,idhost):

global fans_db,fans_cities

global page_count

global fans_count

page_count+=1

print"page_count=",page_count

ids=set(re.findall('uid=(\d+)', page))

for id in ids:

if id!=str(idhost):# one is str ,the other is int

fans_count+=1

info_page=url_to_page("/%s/info" % id)

expression_nick=u'\u6635\u79f0[:|\uff1a](.*?)

nick=re.findall(expression_nick.encode('utf-8'),info_page)[0]

expression_city=u'\u5730\u533a[:|\uff1a](.*?)

city=re.findall(expression_city.encode('utf-8'),info_page)[0]#this must be encode('utf-8')!!!!!

print nick,city,fans_count

'''if len(fans_cities)==50:

fans_cities_dict=dict()

for i in range(len(fans_cities)):

fans_cities_dict[str(i+1)]=fans_cities[i]

fans_db.insert(fans_cities_dict)

del fans_cities[:]

'''e_page=etree.html(page)

url_next=e_page.xpath(u'//div[@class="pa" and @id="pagelist"]/form/div/a[text()="\u4e0b\u9875"]/@href')

if url_next:

next_page=url_to_page(host+url_next[0])

parse_for_fans(next_page,idhost)

else:

fans_cities_dict=dict()

for i in range(len(fans_cities)):

fans_cities_dict[str(i+1)]=fans_cities[i]

fans_db.insert(fans_cities_dict)

del fans_cities[:]

page=weibologin(id=1291477752)

parse_for_fans(page,idhost=1291477752)

2.mongodb的資料必須要為python字典。

爬取新浪微博

學到的東西。1 習慣用logger,而不是用print self.logger.debug 開始解析 format response.url 2 習慣用正規表示式 這是在pipeline清理資料時用到的 s 5分鐘前 if re.match d 分鐘前 s minute re.match d s g...

快速新增新浪微博粉絲的技巧

對於乙個新開的微博,初期要做的加粉絲數量,程式設計客棧只有先聚集一些粉絲人氣後,做微博質量才會有效果。註冊賬號我還是用了能吸引網民眼球的美女名效應,不過中途換了幾次暱稱,但對於加粉的效果不好。所以起名一定要好,還有不能亂換暱稱。微博內容的發布,我是用了皮皮時光機,因為白天工作比較忙,在中午或空餘的時...

爬蟲初探 新浪微博搜尋爬蟲總覽

在這裡需要說明一下,一般來說,資料抓取工作主要有兩種方式 一是通過抓包工具 fiddle 進行抓包分析,獲取ajax請求的url,通過url抓取資料,這也是更為通用 推薦的方法 另外一種方法就是後面要使用的模擬瀏覽器行為的爬蟲。那麼,在源 中資訊不可見的情況下,通過什麼方法能夠提取js 中的html...