软件:charles、pycharm
平台:mac
网址:https://view.inews.qq.com/a/20180718A1WSEB00?uid=
第一步:获取api接口
1、电脑中安装charles抓包软件,与手机处于同一wifi网络下,将charles作为手机端的代理服务器。
主机名:IP地址为电脑端的IP,
端口号:根据电脑端的charles软件设置为8888
2、打开手机端腾讯新闻app,charles软件抓取具体api接口(这里不详细介绍)得到接口:https://view.inews.qq.com/a/20180718A1WSEB00?uid=
第二步:分析
1、查看 通过Chrome浏览器检查看到代码无问题
但打开源代码,是这样的,说明网页数据提取之后还需要进行转码
这样肯定没有办法提取,所以主要的问题,集中在了解析网页的数据构成,以及解析。
2、分析 这次单页面主要爬取的信息就两种,新闻文本、以及图片。
先说文字,源代码里js代码与unicode混在一起,看的眼晕头发麻,所以最主要是要将内容分离。再转码。这个页面提取时,我是分两步,第一步,先提取文字,再提取图片
先从文章作者那里开始,通过re匹配提取整篇文件,提取后的数据进行转码后是这个样子的,图片的url还需要进行提取,所以还需要再使用一次re匹配,单独提出图片的地址,并将图片中的图片地址进行替换(替换成本地或者网上的url)
第三步:代码
import json,re import requests def getImg(): response = requests.get(‘http://view.inews.qq.com/a/20180718A1WSEB00?uid=‘) html = response.text # ------------------------------ news_pat = re.compile(r‘\"cnt_html":\"(.*)\",\"content":\[{"type\":\"cnt_article\",\"desc\":‘,re.S) news = news_pat.search(html).group(1).encode(‘utf-8‘).decode(‘unicode_escape‘).replace(‘\/‘,‘/‘) # 源新闻 img_list = [] info_pat = re.compile(r‘("content":\[{"type\":\"cnt_article\".*?)</script>‘,re.S) # 获取图片地址的正则 result = info_pat.search(html).group(1) img_pat = re.compile(r‘{"type":"img_url".*?"desc":null}‘) img_resu = img_pat.findall(result) for rese in img_resu: res = json.loads(rese) img_list.append(res[‘img_url‘]) # 图片地址,存储成一个列表 imgurl_pat = re.compile(r‘(<!--IMG_.*?-->)‘) # 获取文件中图片url并替换的正则 img_url = imgurl_pat.findall(news) for i in range(len(img_list)): if img_url[i] in news: news = news.replace(img_url[i], ‘<img src="‘+img_list[i]+‘" >‘) else: print(‘不成功‘) print(news) if __name__ == ‘__main__‘: getImg()
最终将内容简单保存在html文件里,效果如下
这条新闻的提取难度主要就在解析上,几个正则干下来有些蒙。 上面的代码就是最终,但暂时没有下载图片,并且也没有把信息存数据库,也没有title\time\author等条目,仅做爬虫练习。
另外,求份爬虫工作~~~