版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yk_0311/article/details/82500532
微博地址:https://m.weibo.cn/u/2830678474
代码
参考了书上的代码
from pyquery import PyQuery as pq
import requests
def getPage(page):
url = 'https://m.weibo.cn/api/container/getIndex?'#在怎么来?分析Ajax请求
hd = {"User-Agent": 'Mozilla'} # 模仿浏览器
params = {'type': 'uid',
'value': '2830678474',
'containerid': '1076032830678474',
'page': page} # 作为参数增加到url中去
try:
r = requests.get(url, headers=hd, params=params)
r.raise_for_status()
return r.json() # 解析为JSON返回
except:
print('-----')
def parsePage(json):
if json:
items = json.get('data').get('cards') # 是一个列表
for item in items:
item = item.get('mblog') # 是一个字典
if item == None:
continue
content = {}
content['data'] = item.get('created_at') # 日期
content['text'] = pq(item.get('text')).text() # 借助pyquery将正文中的HTML标签去掉了
content['source'] = item.get('source') # 用什么发表
yield content
def main():
for i in range(1, 11): # 爬取到第十页结束
json = getPage(i)
results = parsePage(json)
for result in results:
print(result)
main()
其中用到了异常处理
返回的是一个json对象
我添加了
if item==None:
continue
为什么?因为item可能会是None,书上的代码并不完全是正确的
content['text'] = pq(item.get('text')).text() # 借助pyquery将正文中的HTML标签去掉了
这一段代码将正文的HTML标签给去掉了,也不错