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 種爬蟲如...