【Python爬虫】W级数据

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.jianshu.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.jianshu.com/recommendations/users?page='  # 推荐作者页面在此基础上进行迭代
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.jianshu.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,'粉丝数:',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("第{}个请求页面!".format(page_index))
        soup = BeautifulSoup(r.text, 'lxml')
        stop_mark = soup.find('div', class_='col-xs-8')  # 通过定位页面中的这个元素来停止页面的请求
        if stop_mark:  # 如果存在该元素,则进行推荐作者相关信息的获取
            author_name = soup.find_all('h4', class_='name')  # 获取作者姓名

            author_url = soup.select('div[class~=wrap] > a')  # 获取推荐作者链接。此处通过css3来定位标签
            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     #关注人数
                fans_num=recommend_author_info[1].select('p')[0].text       #粉丝人数
                # fans_url=recommend_author_info[1].select('a')[0]['href']
                article_num = recommend_author_info[2].select('p')[0].text      #文章数
                word_num = recommend_author_info[3].select('p')[0].text     #字数
                getLike_num = recommend_author_info[4].select('p')[0].text      #获得喜欢数
                # 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])  #将推荐作者的相关信息写入csv文件
                get_not_recommend_author_info(url,name,fans_num)
            page_index += 1
            time.sleep(1)
        else:
            break  # 当请求的页面无该元素时,则说明本页面不存在推荐作者,跳出循环


start = time.time()
recommendFile = open('recommend_author.csv', 'a+', newline='', encoding='utf-8')
recommend_csvWrite = csv.writer(recommendFile)
recommend_csvWrite.writerow(['作者名', '首页链接', '关注人数', '粉丝', '文章', '字数', '收获喜欢'])

notRecommendFile = open('User5.csv', 'a+', newline='', encoding='utf-8')
not_recommend_csvWrite = csv.writer(notRecommendFile)
not_recommend_csvWrite.writerow(['用户名', '关注数', '粉丝数', '文章数'])

get_recommend_author_info()
#


end = time.time()
# print(UserName)
print("总耗时 %0.3f" % (end - start))
#

推荐作者1.png
推荐作者2.png
用户1.png
用户2.png
存在的问题:
1、通过推荐粉丝进行爬取无法全部获得。
2、爬取速度过慢,代码需要优化
3、写入用户信息时,粉丝信息写入了两遍,这个可以忽略......
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容