Я занимаюсь веб-сканированием, которое должно собирать комментарии пользователей к каждому из 200 000 видео авторов на видео-сайте. Недавно этот веб-сайт обновил свой URL-адрес, добавив новый параметр (_signature) в их URL-адрес API. Есть ли какие-либо предложения для получения этого нового параметра?
Примеры URL и URL веб-API приведены ниже: https://www.ixigua.com/api/comment_module/video_comment?_signature=vhm.AAgEAy3U9zpQ3OMV74fpuAAOL1&item_id=6698972531753222663&group_id=6698972531753222663&offset=10
относится к: https://www.ixigua.com/i6698972531753222663/
https://www.ixigua.com/api/comment_module/video_comment?_signature=Xs6IHAAgEABXgvIJnklsal7OiAAAAI3&item_id=6699046583612211720&group_id=6699046583612211720&offset=10
относится к: https://www.ixigua.com/i6699046583612211720/
То, что мне пришлось достать до исходных 200 000 авторов, это список их item_id / group_id (я сохранил их в Amazon A3, вы можете найти его в моем коде ниже). Плюс, item_id совпадает с group_id. Поэтому для продолжения все, что мне нужно, - это подпись.
Для разных авторов этот сайт присваивает им уникальную подпись. В примере URL-адреса API Подпись первого автора: vh-m.AAgEAy3U9zpQ3OMV74fpuAAOL1. Второй это Xs6IHAAgEABXgvIJnklsal7OiAAAAI3
Это то, с чем я встречаюсь. Я просмотрел сайт и нашел его под XHR как часть параметра строки запроса, но не знаю, как его получить. До этого обновления URL API не содержит подписи _. Мой оригинальный код прошел гладко, как показано ниже:
class Id1Spider(scrapy.Spider):
name = 'id1'
allowed_domains = ['www.ixigua.com']
df = pd.read_csv('https://s3.amazonaws.com/xiguaid/group_id.csv')
df = df.iloc[32640:189680,1]
list_id = df.unique().tolist()
i = 0
start_urls = ["https://www.ixigua.com/api/comment/list/?group_id="+ str(list_id[i]) +"&item_id="+ str(list_id[i]) +"&offset=0&count=20"]
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
offset = 0
count = 20
def parse(self, response):
data = json.loads(response.body)
comments = data['data']['comments']
total = data['data']['total']
for ele in list(comments):
try:
comments_id=ele['user']['user_id']
comments_text=ele['text']
reply_count=ele['reply_count']
digg_count=ele['digg_count']
create_time=ele['create_time']
except:
pass
item = {
'comments_id':comments_id,
'comments_text':comments_text,
'reply_count':reply_count,
'digg_count':digg_count,
'create_time':create_time,
'item_id': self.list_id[self.i]
}
yield item
if data['data']['has_more']:
self.offset += 20
if self.offset > total:
self.offset = total
elif self.offset <= total:
self.offset = self.offset
next_page_url = "https://www.ixigua.com/api/comment/list/?group_id="+ str(self.list_id[self.i]) +"&item_id="+ str(self.list_id[self.i]) +"&offset=" + str(self.offset)+"&count=" + str(self.count)
yield scrapy.Request(url = next_page_url, callback = self.parse)
else:
self.offset = 0
self.count = 20
self.i = self.i + 1
try:
next_page_url = "https://www.ixigua.com/api/comment/list/?group_id="+ str(self.list_id[self.i]) +"&item_id="+ str(self.list_id[self.i]) +"&offset=" + str(self.offset)+"&count=" + str(self.count)
yield scrapy.Request(url = next_page_url, callback = self.parse)
except:
pass
Заранее спасибо за любые предложения !!! Пожалуйста, дайте мне знать, если мне не хватает информации для решения этой проблемы, так как это мой первый пост.