Loading... ## 直接上代码 经过对网页代码分析: > **难点**: 首次请求过去只能加载到首页一半的新闻,还有另一半是异步请求获取的, 且请求参数是以微秒为单位的两个时间参数, **如何分析出这两个参数是怎么计算出来**的才能完成另一半新闻的自动点赞; 不多说了看代码吧~ ```python import requests import re import time class GoVote: def __init__(self, headers=None, cookies=None): self.session = requests.session() self.session.headers.update(headers) self.session.cookies.update(cookies) self.url = 'https://dig.chouti.com/' self.vot_api = 'https://dig.chouti.com/link/vote' # self.cancel_vot_api = 'https://dig.chouti.com/link/cancel/vote' self.hot_url = 'https://dig.chouti.com/link/hot?afterTime={after_time}&_={time_millsec}' self.link_id_set = None def get_all_id(self): # 找到当前页面的所有的link_id self.response_first_25 = self.session.get(self.url) with open('chouti_index.html', 'wb') as f: f.write(self.response_first_25.content) first_25_ids_pattern = re.compile('\?link_id=(\d+?)"') afterTime_pattern = re.compile(' data-time-into-pool="(\d+?)" ') first_25_ids_list = first_25_ids_pattern.findall(self.response_first_25.text) after_time_temp = afterTime_pattern.findall(self.response_first_25.text) print(after_time_temp) after_time = after_time_temp[-1] # 去重 self.link_id_set = set(first_25_ids_list) # 获取当前时间(微妙), 需要拼接一个时间窗url请求首页中另外25个信息 time_millsec = int(time.time() * 1000) # 'https://dig.chouti.com/link/hot?afterTime={after_time}&_={time_millsec}' second_url = self.hot_url.format(after_time=after_time, time_millsec=time_millsec) print(f'second_url:{second_url}') res = self.session.get(second_url) for data in res.json().get('data'): self.link_id_set.add(str(data.get('id'))) print(f'需点赞:{len(self.link_id_set)}个') def save_response(self): with open('chouti_index.html', 'wb') as f: f.write(self.response_first_25.content) def go_vote(self): for link_id in self.link_id_set: data = {'linkId': link_id} # 给首页所有50个新闻点赞, 间隔0.5秒 time.sleep(0.5) response_vote = self.session.post(self.vot_api, data=data) response_vote: requests.Response print(f'{link_id}:{response_vote.json()}') print('***完成***') def run(self): self.get_all_id() self.save_response() self.go_vote() if __name__ == '__main__': cookies = { 'deviceId':'web.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9', 'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9', 'path': '/', } headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36', 'Referer': 'https://dig.chouti.com/', } obj = GoVote(headers, cookies) obj.run() ``` © 允许规范转载