python 簡書使用者爬蟲

2022-07-15 21:27:16 字數 3295 閱讀 1153

1

#python2#

-*- coding: utf-8 -*-

3"""

4__title__ = ''

5__author__ = 'wlc'

6__mtime__ = '2017/10/15'

7"""

8importre9

import

time

10import

math

11import

csv12

import

requests

13from bs4 import

beautifulsoup

14from collections import

deque

15import

sys16

#python 預設遞迴限制為900

17 sys.setrecursionlimit(10000)

1819

#建立乙個csv檔案儲存資訊

20 path = '

datacollection/userinfo.csv

'21 csvfile = open(path, '

a+', newline='', encoding='

utf-8')

22 writer =csv.writer(csvfile)

23 writer.writerow(('

id','

name

','following

','follower

','article

','word

','like'))

2425

#全域性變數用來儲存userid 和關注的人數

26 idcontainer =set()27#

用來放置使用者的鏈結使用雙向佇列

28 linkdeque =deque()

2930

class

jianshu(object):

31def

__init__

(self):32#

定製url模板

33 self.url = '

'34#使用者id與name的匹配規則

35 self.idpattern = re.compile('

(.*?)')

36#使用者的關注 粉絲 文章 文集 的匹配規則

37 self.metalpattern = re.compile('

關注 (\d+)

粉絲 (\d+)

文章 (\d+)')

38 self.meta = re.compile('

寫了 (\d+) 字,獲得了 (\d+) 個喜歡')

39#偽裝成瀏覽器

40 self.header =

4142

defcreaterequest(self, userid, page):

43 url = self.url.format(userid = userid, page =page)

44 requ = requests.get(url, headers =self.header).text

45return

requ

4647

defpageresponse(self, requ):

48 bsobj = beautifulsoup(requ, '

lxml')

49 usercontainer = bsobj.find_all('

ul',)[0]

50 usercontent =usercontainer.contents

51 usercontent = [str(user) for user in usercontent if user != '\n'

]52#關注使用者列表

53return

usercontent

5455

defparseruserinfo(self, user):

56 id, name =re.findall(self.idpattern, user)[0]

57 followingnum, followernum, articlenum =re.findall(self.metalpattern, user)[0]

58try

:59 wordnum, likenum =re.findall(self.meta, user)[0]

60except

:61 wordnum, likenum =0, 0

62 content =(id, name, followingnum, followernum, articlenum, wordnum, likenum)

63writer.writerow(content)

64return

content

6566

defgetuserlist(self, userid, following):

67idcontainer.add((userid, following))

68 num = int(following) / 10

69 page =math.ceil(num)

70for pg in range(1, page + 1, 1):

71 requ =self.createrequest(userid, pg)

72 userlist =self.pageresponse(requ)

73for user in

userlist:

74 content =self.parseruserinfo(user)

76 time.sleep(1)

77for deq in

linkdeque:

78if deq not

inidcontainer:

79 self.getuserlist(deq[0],deq[1])

80print("

what")

81 jianshu = jianshu().getuserlist('

1562c7f16a04

',45)

python 爬蟲 豆瓣讀書使用者評分爬蟲

首先我們先建立接下來需要用的的東西 import requests 匯入requests模組用於請求網頁 from lxml import etree 從lxml模組中匯入etree模組用於解析網頁 class userspinfen 定義乙個douban類,用於承載後面的 def init sel...

批量匯出某個簡書使用者的所有文章列表和文章超連結

既然我是程式設計師,沒有這個功能我就自己實現乙個。最開始我寫了乙個nodejs應用,如下 var request require request var jsdom require jsdom var jsdom jsdom.jsdom const prefix const page u 99b87...

python爬蟲框架feapde的使用簡介

大家好,我是安果!眾所周知,python 最流行的爬蟲框架是 scrapy,它主要用於爬取 結構性資料 今天推薦一款更加簡單 輕量級,且功能強大的爬蟲框架 feapder 專案位址 和 scrapy 類似,feapder 支援輕量級爬蟲 分布式爬蟲 批次爬蟲 爬蟲報警機制等功能 內建的 3 種爬蟲如...