【Python爬蟲】W級(jí)數(shù)據(jù)

import csv
import requests
from bs4 import BeautifulSoup
import time
from requests.exceptions import RequestException
from multiprocessing.dummy import Pool as ThreadPool

simple_book = 'http://www.reibang.com'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
headers = {'User-Agent': user_agent}
base_url = 'http://www.reibang.com/recommendations/users?page='  # 推薦作者頁面在此基礎(chǔ)上進(jìn)行迭代
recommend_author = {}


# UserName=set()

# def write_to_csv(name,url,follow_num,fans_num,article_num,word_num,get_like):
#     csvWrite.writerow([name,url,follow_num,fans_num,article_num,word_num,get_like])
jishu=0
def download(url):
    try:
        r = requests.get(url, headers=headers)
        return r
    except RequestException as e:
        print("The problem is {}".format(e))


# http://www.reibang.com/users/3aa040bf0610/followers?page=2
followStr = '/followers?page='

def get_User_info(url):
    # i=0
    try:
        r = requests.get(url, headers=headers)
        # print(r.url)
        soup=BeautifulSoup(r.text,'lxml')
        user_list=soup.find_all('div',class_='info')
        for i in range(len(user_list)):
            name=user_list[i].find('a',class_='name')

            if name == None:
                continue
            else:
                follow_fan_article=user_list[i].find_all('div',class_='meta')
                follow = follow_fan_article[0].select('span:nth-of-type(1)')[0].text.strip()
                # print(follow)
                fan = follow_fan_article[0].select('span:nth-of-type(2)')[0].text.strip()
                article = follow_fan_article[0].select('span:nth-of-type(2)')[0].text.strip()
                word=follow_fan_article[1].text.strip().replace('\n','')
                # print("第{}頁用戶".format(i))
                # print(jishu)
                # jishu = 1+jishu
                not_recommend_csvWrite.writerow([name.text,follow,fan,article,word])
                # print(name.text,follow,fan,article,word)

    except RequestException as e:
        print("The problem is {}".format(e))
def get_not_recommend_author_info(url, name,fan_num):
    # index = 1
    fan_num=int(fan_num)
    pool = ThreadPool(4)
    UserUrlList=[]
    if(fan_num%9 == 0):max_index=fan_num//9
    else:max_index=fan_num//9+1
    print("{}下請求的用戶頁面!".format(name))
    print(name,url,'粉絲數(shù):',fan_num)

    for index in range(1,100):
        UserUrlList.append(url + followStr + str(index))
        index+=1
        print(url + followStr + str(index))
    pool.map(get_User_info,UserUrlList)

def get_recommend_author_info():

    page_index = 1
    while True:
        r = download(base_url + str(page_index))
        print("第{}個(gè)請求頁面!".format(page_index))
        soup = BeautifulSoup(r.text, 'lxml')
        stop_mark = soup.find('div', class_='col-xs-8')  # 通過定位頁面中的這個(gè)元素來停止頁面的請求
        if stop_mark:  # 如果存在該元素绘梦,則進(jìn)行推薦作者相關(guān)信息的獲取
            author_name = soup.find_all('h4', class_='name')  # 獲取作者姓名

            author_url = soup.select('div[class~=wrap] > a')  # 獲取推薦作者鏈接捶枢。此處通過css3來定位標(biāo)簽
            for i in range(len(author_url)):
                # recommend_author[author_name[i].text.strip()]=simple_book+author_url[i]['href'].strip()
                authorHtml=download(simple_book+author_url[i]['href'].strip())
                authorSoup=BeautifulSoup(authorHtml.text,'lxml')
                recommend_author_info=authorSoup.select('div[class~=info] > ul > li')   #返回的列表中包含了推薦作者的一些信息
                name=author_name[i].text.strip()

                url=simple_book+author_url[i]['href'].strip()   #推薦作者首頁鏈接
                follow_num=recommend_author_info[0].select('p')[0].text     #關(guān)注人數(shù)
                fans_num=recommend_author_info[1].select('p')[0].text       #粉絲人數(shù)
                # fans_url=recommend_author_info[1].select('a')[0]['href']
                article_num = recommend_author_info[2].select('p')[0].text      #文章數(shù)
                word_num = recommend_author_info[3].select('p')[0].text     #字?jǐn)?shù)
                getLike_num = recommend_author_info[4].select('p')[0].text      #獲得喜歡數(shù)
                # print(name,url,fans_num)
            # write_to_csv(name,url,follow_num,fans_num,article_num,word_num,getLike_num)
                recommend_csvWrite.writerow([name,url,follow_num,fans_num,article_num,word_num,getLike_num])  #將推薦作者的相關(guān)信息寫入csv文件
                get_not_recommend_author_info(url,name,fans_num)
            page_index += 1
            time.sleep(1)
        else:
            break  # 當(dāng)請求的頁面無該元素時(shí)啸澡,則說明本頁面不存在推薦作者,跳出循環(huán)


start = time.time()
recommendFile = open('recommend_author.csv', 'a+', newline='', encoding='utf-8')
recommend_csvWrite = csv.writer(recommendFile)
recommend_csvWrite.writerow(['作者名', '首頁鏈接', '關(guān)注人數(shù)', '粉絲', '文章', '字?jǐn)?shù)', '收獲喜歡'])

notRecommendFile = open('User5.csv', 'a+', newline='', encoding='utf-8')
not_recommend_csvWrite = csv.writer(notRecommendFile)
not_recommend_csvWrite.writerow(['用戶名', '關(guān)注數(shù)', '粉絲數(shù)', '文章數(shù)'])

get_recommend_author_info()
#


end = time.time()
# print(UserName)
print("總耗時(shí) %0.3f" % (end - start))
#

推薦作者1.png
推薦作者2.png
用戶1.png
用戶2.png
存在的問題:
1慰毅、通過推薦粉絲進(jìn)行爬取無法全部獲得隘截。
2、爬取速度過慢汹胃,代碼需要優(yōu)化
3婶芭、寫入用戶信息時(shí),粉絲信息寫入了兩遍着饥,這個(gè)可以忽略......
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末犀农,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贱勃,更是在濱河造成了極大的恐慌井赌,老刑警劉巖谤逼,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贵扰,死亡現(xiàn)場離奇詭異,居然都是意外死亡流部,警方通過查閱死者的電腦和手機(jī)戚绕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枝冀,“玉大人舞丛,你說我怎么就攤上這事耘子。” “怎么了球切?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵谷誓,是天一觀的道長。 經(jīng)常有香客問我吨凑,道長捍歪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任鸵钝,我火速辦了婚禮糙臼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恩商。我一直安慰自己变逃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布怠堪。 她就那樣靜靜地躺著揽乱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粟矿。 梳的紋絲不亂的頭發(fā)上锤窑,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音嚷炉,去河邊找鬼渊啰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛申屹,可吹牛的內(nèi)容都是我干的绘证。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哗讥,長吁一口氣:“原來是場噩夢啊……” “哼嚷那!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杆煞,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤魏宽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后决乎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體队询,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年构诚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚌斩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡范嘱,死狀恐怖送膳,靈堂內(nèi)的尸體忽然破棺而出员魏,到底是詐尸還是另有隱情,我是刑警寧澤叠聋,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布撕阎,位于F島的核電站,受9級(jí)特大地震影響碌补,放射性物質(zhì)發(fā)生泄漏闻书。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一脑慧、第九天 我趴在偏房一處隱蔽的房頂上張望魄眉。 院中可真熱鬧,春花似錦闷袒、人聲如沸坑律。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晃择。三九已至,卻和暖如春也物,著一層夾襖步出監(jiān)牢的瞬間宫屠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工滑蚯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浪蹂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓告材,卻偏偏與公主長得像坤次,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子斥赋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容