azpytools 0.0.3__tar.gz → 0.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {azpytools-0.0.3 → azpytools-0.0.4}/PKG-INFO +1 -1
- azpytools-0.0.4/azpytools/spider.py +191 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools.egg-info/PKG-INFO +1 -1
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools.egg-info/SOURCES.txt +1 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/setup.py +1 -1
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools/__init__.py +0 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools/configwrite.py +0 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools/pinyin.py +0 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools/utils.py +0 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools.egg-info/dependency_links.txt +0 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/azpytools.egg-info/top_level.txt +0 -0
- {azpytools-0.0.3 → azpytools-0.0.4}/setup.cfg +0 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
from lxml import etree
|
|
3
|
+
import json
|
|
4
|
+
import re
|
|
5
|
+
import datetime
|
|
6
|
+
|
|
7
|
+
class spider:
|
|
8
|
+
'''cls_scrapy = spider(url_str,headers)
|
|
9
|
+
htmls = cls_scrapy.html_xpath()
|
|
10
|
+
newlists = htmls.xpath("//span[@class='c-34304b']/div")
|
|
11
|
+
for newlist in newlists:
|
|
12
|
+
data = {}
|
|
13
|
+
str = etree.tostring(newlist,encoding ='utf-8').decode('utf-8')
|
|
14
|
+
data['title'] = re.findall(r"<strong>(.*?)</strong>",str)[0] if re.findall(r"<strong>(.*?)</strong>",str) else None
|
|
15
|
+
'''
|
|
16
|
+
def __init__(self,url,headers) -> None:
|
|
17
|
+
self.session = requests.Session()
|
|
18
|
+
self.__url = url
|
|
19
|
+
self.__headers = headers
|
|
20
|
+
self.response = self.__url_parse()
|
|
21
|
+
self.__html_str = ""
|
|
22
|
+
if self.response.status_code == 200:
|
|
23
|
+
self.__html_str = self.response.content.decode(encoding= 'utf8')
|
|
24
|
+
else:
|
|
25
|
+
self.__html_str = None
|
|
26
|
+
self.html_list = []
|
|
27
|
+
|
|
28
|
+
def __url_parse(self) :
|
|
29
|
+
response = self.session.get(self.__url, headers=self.__headers)
|
|
30
|
+
# response = requests.get(self.__url, headers=self.__headers)
|
|
31
|
+
return response
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def html_str(self):
|
|
35
|
+
return self.__html_str
|
|
36
|
+
|
|
37
|
+
def html_xpath(self):
|
|
38
|
+
return etree.HTML(self.__html_str)
|
|
39
|
+
|
|
40
|
+
def get_html_json(self):
|
|
41
|
+
data_list = self.html_list
|
|
42
|
+
jsons = json.dumps(data_list,ensure_ascii=False)
|
|
43
|
+
return jsons
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class clsSpider():
|
|
48
|
+
url_str = 'https://www.cls.cn/telegraph'
|
|
49
|
+
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36",
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
def __init__(self,maxpage = 0):
|
|
53
|
+
self.curpage = 0
|
|
54
|
+
self.html_list = []
|
|
55
|
+
self.maxpages = maxpage
|
|
56
|
+
self.get_html_list(datetime.datetime.timestamp(datetime.datetime.now()))
|
|
57
|
+
|
|
58
|
+
def get_html_list(self,intimestamp):
|
|
59
|
+
self.curpage += 1
|
|
60
|
+
url = "https://www.cls.cn/nodeapi/telegraphList?app=CailianpressWeb&category=&lastTime={}".format(intimestamp)
|
|
61
|
+
data_list =[]
|
|
62
|
+
lasttime = 0
|
|
63
|
+
if intimestamp == 0:
|
|
64
|
+
return
|
|
65
|
+
cls_scrapy = spider(url,self.headers)
|
|
66
|
+
htmls = json.loads(cls_scrapy.html_str)['data']['roll_data']
|
|
67
|
+
for newlist in htmls:
|
|
68
|
+
data = {}
|
|
69
|
+
data['from'] = 'CLS.CN'
|
|
70
|
+
data['timestamp'] = newlist['ctime']
|
|
71
|
+
data['date'] = datetime.datetime.strftime( datetime.datetime.fromtimestamp(data['timestamp']),'%Y-%m-%d %H:%M:%S')
|
|
72
|
+
data['title'] = newlist['title']
|
|
73
|
+
data['text'] = newlist['content'].replace('\n','<br>')
|
|
74
|
+
data['brief'] = newlist['brief']
|
|
75
|
+
if not data['title']:
|
|
76
|
+
data['title'] = data['brief']
|
|
77
|
+
data_list.append(data)
|
|
78
|
+
if data_list:
|
|
79
|
+
self.html_list.extend(data_list)
|
|
80
|
+
lasttime = data_list[-1]['timestamp']
|
|
81
|
+
|
|
82
|
+
if self.curpage <= self.maxpages:
|
|
83
|
+
self.get_html_list(lasttime)
|
|
84
|
+
|
|
85
|
+
class JinseSpider(spider):
|
|
86
|
+
# maxpages = 1
|
|
87
|
+
url_str = 'https://api.jinse.cn/noah/v2/lives?limit=20'
|
|
88
|
+
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36",
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
def __init__(self,maxpage):
|
|
92
|
+
self.curpage = 0
|
|
93
|
+
self.html_list = []
|
|
94
|
+
self.maxpages = maxpage
|
|
95
|
+
self.get_html_list(0)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def get_html_list(self,id=0):
|
|
100
|
+
url_next = "https://api.jinse.cn/noah/v2/lives?reading=false&sort=&flag=down&id={}&limit=20&_source=m".format(id)
|
|
101
|
+
if id >0 :
|
|
102
|
+
jinse = spider(url_next,self.headers)
|
|
103
|
+
else:
|
|
104
|
+
jinse = spider(self.url_str,self.headers)
|
|
105
|
+
data_list =[]
|
|
106
|
+
self.curpage += 1
|
|
107
|
+
htmls = jinse.html_str
|
|
108
|
+
newlists = json.loads(htmls)["list"][0]["lives"]
|
|
109
|
+
data_list = [{"from":"JINSE.CN",
|
|
110
|
+
"title": news["content_prefix"],
|
|
111
|
+
"text":news["content"].replace('\n','<br>'),
|
|
112
|
+
"date":datetime.datetime.strftime(datetime.datetime.fromtimestamp(news["created_at"]),'%Y-%m-%d %H:%M:%S') ,
|
|
113
|
+
'id':news['id']} for news in newlists]
|
|
114
|
+
self.html_list.extend(data_list)
|
|
115
|
+
newid = data_list[-1]['id']
|
|
116
|
+
|
|
117
|
+
if self.curpage <= self.maxpages and newid:
|
|
118
|
+
self.get_html_list(newid)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class weiboSpider():
|
|
122
|
+
|
|
123
|
+
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36",
|
|
124
|
+
}
|
|
125
|
+
def __init__(self,uuid,cookie):
|
|
126
|
+
self.html_list = []
|
|
127
|
+
self.headers["cookie"] = cookie
|
|
128
|
+
for i in range(2):
|
|
129
|
+
url_str = 'https://weibo.com/ajax/statuses/mymblog?uid={}&page={}&feature=0'.format(uuid,i+1)
|
|
130
|
+
self.html_list.extend(self.get_html_list(url_str))
|
|
131
|
+
|
|
132
|
+
def get_html_list(self,url_str):
|
|
133
|
+
weibo_scrapy = spider(url_str,self.headers)
|
|
134
|
+
htmls = weibo_scrapy.html_str
|
|
135
|
+
newlists = json.loads(htmls)["data"]["list"]
|
|
136
|
+
data_list = []
|
|
137
|
+
data_list =[{'name':lst['user']['screen_name'],
|
|
138
|
+
'title':lst['created_at'],
|
|
139
|
+
'mblogid':lst['mblogid'],
|
|
140
|
+
'date':datetime.datetime.strftime(datetime.datetime.strptime(lst['created_at'],"%a %b %d %H:%M:%S %z %Y"),'%Y-%m-%d %H:%M:%S') ,
|
|
141
|
+
'longtext':self.get_longtext(lst['mblogid']) if bool(lst['isLongText']) else lst['text'],
|
|
142
|
+
'text': lst['text_raw']} for lst in newlists ]
|
|
143
|
+
del data_list[0]
|
|
144
|
+
return data_list
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def get_longtext(self,mblogid):
|
|
148
|
+
longtext = ''
|
|
149
|
+
url_string = "https://weibo.com/ajax/statuses/longtext?id={}".format(mblogid)
|
|
150
|
+
weibo_longtext_scrapy = spider(url_string,self.headers)
|
|
151
|
+
|
|
152
|
+
htmls = weibo_longtext_scrapy.html_str
|
|
153
|
+
if htmls != None:
|
|
154
|
+
ljson_data = json.loads(htmls).get("data",None)
|
|
155
|
+
if ljson_data != None:
|
|
156
|
+
longtext = ljson_data.get("longTextContent")
|
|
157
|
+
# longtext = json.loads(htmls)["data"]["longTextContent"]
|
|
158
|
+
return longtext
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class weiboHotSpider():
|
|
162
|
+
url_str = 'https://weibo.com/ajax/statuses/hot_band'
|
|
163
|
+
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36",
|
|
164
|
+
"x-requested-with":"XMLHttpRequest",
|
|
165
|
+
}
|
|
166
|
+
def __init__(self,cookie):
|
|
167
|
+
self.headers["cookie"] = cookie
|
|
168
|
+
self.html_list = []
|
|
169
|
+
self.html_list.extend(self.get_html_list())
|
|
170
|
+
|
|
171
|
+
def get_html_list(self):
|
|
172
|
+
weibo_scrapy = spider(self.url_str,self.headers)
|
|
173
|
+
htmls = weibo_scrapy.html_str
|
|
174
|
+
# print(htmls)
|
|
175
|
+
newlists = json.loads(htmls)["data"]["band_list"]
|
|
176
|
+
# print(newlists)
|
|
177
|
+
data_list = []
|
|
178
|
+
for lst in newlists:
|
|
179
|
+
dats = {}
|
|
180
|
+
# Not AD
|
|
181
|
+
if lst.get("is_ad",None) == None:
|
|
182
|
+
dats['name'] = 'HOT'
|
|
183
|
+
dats['title'] = lst['note']
|
|
184
|
+
dats['hotnum'] = lst['num']
|
|
185
|
+
dats['date'] = datetime.datetime.strftime(datetime.datetime.fromtimestamp(lst.get('onboard_time'),None),'%Y-%m-%d %H:%M:%S')
|
|
186
|
+
lmblog = lst.get('mblog',None)
|
|
187
|
+
if lmblog != None:
|
|
188
|
+
dats['text'] = lmblog.get('text','') # lst['mblog']['text']
|
|
189
|
+
data_list.append(dats)
|
|
190
|
+
return data_list
|
|
191
|
+
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|