p.p1 { margin: 0; font: 11px “Helvetica Neue”; color: rgba(0, 0, 0, 1); -webkit-text-stroke: #000000 }
p.p2 { margin: 0; font: 11px “Helvetica Neue”; color: rgba(0, 0, 0, 1); -webkit-text-stroke: #000000; min-height: 12px }
p.p3 { margin: 0; font: 11px “PingFang SC”; color: rgba(0, 0, 0, 1); -webkit-text-stroke: #000000 }
span.s1 { font: 11px “PingFang SC”; font-kerning: none }
span.s2 { font-kerning: none }
span.s3 { font: 11px “Helvetica Neue”; font-kerning: none }
span.Apple-tab-span { white-space: pre }

软件:charlespycharm

平台:mac

 

网址:https://view.inews.qq.com/a/20180718A1WSEB00?uid=

 

第一步:获取api接口

1、电脑中安装charles抓包软件,与手机处于同一wifi网络下,将charles作为手机端的代理服务器。

  主机名:IP地址为电脑端的IP

  端口号:根据电脑端的charles软件设置为8888

 

2、打开手机端腾讯新闻appcharles软件抓取具体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]+\'" alt="">\')
        else:
            print(\'不成功\')
    print(news)

if __name__ == \'__main__\':

    getImg()

最终将内容简单保存在html文件里,效果如下

这条新闻的提取难度主要就在解析上,几个正则干下来有些蒙。 上面的代码就是最终,但暂时没有下载图片,并且也没有把信息存数据库,也没有title\time\author等条目,仅做爬虫练习。

 

另外,求份爬虫工作~~~

 

版权声明:本文为hejianlong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hejianlong/p/9340834.html