实战
今日的目标网站
第一步:目标 - 网址 - 分析 - 发起网络请求 - 得到网站数据
import requests
cookies = {
'SINAGLOBAL': '4164568015392.127.1641551947467',
'SUBP': '0033WrSXqPxfM725Ws9jqgMF55529P9D9Wh2oFXSR-ZhVoD7mP8mQX5S5JpX5KMhUgL.Fo-71hqRSoMNSo-2dJLoIpYLxK-L1hqLBoMLxKnL1h.LBoeLxKML1-2L1hxJ9J9J',
'UPSTREAM-SERVICE-ACCOUNT-WEIBO-COM': '5c9d4090953640c68ef0a73f01c3673b',
'ALF': '1687088338',
'SSOLoginState': '1655552337',
'SCF': 'AmHV4ft38uoBMvGWUwHit4snm_fp21qN-LbyZIeqTtam1IRnq0gVDmexwVlu9Ce1cRXqyK7uMpELU4G6Do_3q08.',
'SUB': '_2A25PqckDDeRhGeNO41QZ9inLzTmIHXVs3r3LrDV8PUNbmtANLWzBkW9NTt9Ar3W6_endjwecllkTKZB6gQhHxF8N',
'_s_tentry': 'login.sina.com.cn',
'UOR': ',,login.sina.com.cn',
'Apache': '3914150919076.753.1655552339605',
'ULV': '1655552339610:8:3:3:3914150919076.753.1655552339605:1655476178593',
'PC_TOKEN': '49701743a5',
'WBStorage': '4d96c54e|undefined',
}
headers = {
'authority': 'service.account.weibo.com',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'max-age=0','referer': 'https://service.account.weibo.com/?type=6&status=0',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
}
params = {
'type': '5',
'status': '0',
}
# 请求网络
response = requests.get('https://service.account.weibo.com/', params=params, cookies=cookies, headers=headers)
print(response.text)
我们发现获取到的数据,非常的混乱,并且里面也没有显示任何的中文,不好辩解,比如网址的链接等。需要特殊的处理一下。
# 转码
response = response.content.decode('unicode_escape')
print(response)
经过处理之后,数据结构一目了然。接下来把我们认为中要的数据进行提取就可以了。这里我采用的是re正则表达式,其他的方式也可以 大家可以自行探索一番。
第二步:解析 - 提 取有价值的数据内容
点击每一个标题,会进入到该消息的详情页中。
import re
re_content = re.findall('<td><div class="m_table_tit"><a href="(.*?)" target="_blank">.*?</a></div></td>',response)
print(re_content)
for tony in re_content:
# + 拼接 链接
url = 'https://service.account.weibo.com' + tony
print(url)
接下来重复第一步、第二步的操作,获取到详情页的数据;其他的数据以此类推,都是一样的思路;大家可以动手自己实践下。
第三步: 持久化保存数据
for text in content:
file = open('tony-微博.txt','a',encoding='utf-8')
file.write(text+'\n')