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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azpytools
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  Summary: tools for az
5
5
  Author: AndyZhu
6
6
  Author-email: andyzhu@live.com
@@ -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
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azpytools
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  Summary: tools for az
5
5
  Author: AndyZhu
6
6
  Author-email: andyzhu@live.com
@@ -2,6 +2,7 @@ setup.py
2
2
  azpytools/__init__.py
3
3
  azpytools/configwrite.py
4
4
  azpytools/pinyin.py
5
+ azpytools/spider.py
5
6
  azpytools/utils.py
6
7
  azpytools.egg-info/PKG-INFO
7
8
  azpytools.egg-info/SOURCES.txt
@@ -1,7 +1,7 @@
1
1
  from setuptools import setup, find_packages
2
2
  setup(
3
3
  name = 'azpytools',
4
- version = '0.0.3',
4
+ version = '0.0.4',
5
5
  author = 'AndyZhu',
6
6
  author_email = 'andyzhu@live.com',
7
7
  description='tools for az',
File without changes
File without changes
File without changes