需求分析
抓取的内容
数据是怎么加载的
新浪微博的数据是用ajax异步下拉加载的,在chrome的调试模式下可捕捉到相应的请求:
json结构分析
返回的json数据结构中,我们需要的是以下字段:
data
cards
mblog
created_at # 发布时间
text # 正文
reposts_count # 转发数
comments_count # 评论数
attitudes_count # 点赞数
代码实现
首先确保安装了requests和pyquery库
pip install pyquery
pip install requests
具体代码解析:
import requests
from urllib.parse import urlencode
from pyquery import PyQuery as pq
host = ‘m.weibo.cn’
base_url = ‘https://%s/api/container/getIndex% host
user_agent = ‘User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 wechatdevtools/0.7.0 MicroMessenger/6.3.9 Language/zh_CN webview/0’
headers = {
‘Host’: host,
‘Referer’: ‘https://m.weibo.cn/u/1665372775’,
‘User-Agent’: user_agent
}
# 按页数抓取数据
def get_single_page(page):
params = {
‘type’: ‘uid’,
‘value’: 1665372775,
‘containerid’: 1076031665372775,
‘page’: page
}
url = base_url + urlencode(params)
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
except requests.ConnectionError as e:
print(‘抓取错误’, e.args)
# 解析页面返回的json数据
def parse_page(json):
items = json.get(‘data’).get(‘cards’)
for item in items:
item = item.get(‘mblog’)
if item:
data = {
‘id’: item.get(‘id’),
‘text’: pq(item.get(“text”)).text(), # 仅提取内容中的文本
‘attitudes’: item.get(‘attitudes_count’),
‘comments’: item.get(‘comments_count’),
‘reposts’: item.get(‘reposts_count’)
}
yield data
if __name__ == ‘__main__’:
for page in range(1, 10): # 抓取前十页的数据
json = get_single_page(page)
results = parse_page(json)
for result in results:
print(result)
运行结果
{‘id’: ‘4241354777389653’, ‘text’: ‘【新书预售】 我经常觉得生活就如同唐吉坷德,持一只长矛,去挑战一个个风车。你越是勇敢,你就越是可笑。我们必须正确认识自己,认识自己手里的兵器,也要认清我们要去挑战的是何种存在。 这些风车有爱情,有亲情,有友谊,有远行,有阅读,亦有人性…我把自己跌跌撞撞挑战过的十八个风车,写成了 …全文’, ‘attitudes’: 646, ‘comments’: 509, ‘reposts’: 155}
{‘id’: ‘4276572205338096’, ‘text’: ‘雪橇犬,鸟,鲸鱼,海豹,冰块,人(最后一张)。 格陵兰’, ‘attitudes’: 35, ‘comments’: 18, ‘reposts’: 1}
{‘id’: ‘4276459473976711’, ‘text’: ‘北极 微博视频’, ‘attitudes’: 196, ‘comments’: 39, ‘reposts’: 12}
{‘id’: ‘4276308663690970’, ‘text’: ‘真好看,魅力十足//@zhj居安:妈呀!太好看了吧!保持的真好,羡慕呀!’, ‘attitudes’: 379, ‘comments’: 91, ‘reposts’: 191}
{‘id’: ‘4276172055838171’, ‘text’: ‘在高铁渣男这件事上,我觉得乘警也必须要反思,如果不让座,必须强制执行。如果乘警不作为,个体的乘客如何能解决自己权益收到伤害的情形,难不成都要靠自己的拳头去解决问题们有些执法者的问题在于,该有善意的时候心狠,该心狠的时候又充满了没原则的善意。’, ‘attitudes’: 3536, ‘comments’: 496, ‘reposts’: 601}
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫urllib208567 人正在系统学习中 相关资源:aladdin股市量化分析预测涨跌软件12.7周二版源代码—三一重工…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!