美文网首页菜鸟学Python程序员爬虫专题
第五课 Python爬虫抓取新浪新闻的内容页

第五课 Python爬虫抓取新浪新闻的内容页

作者: DYBOY | 来源:发表于2017-09-06 15:12 被阅读152次

    内容页结构:

    以这篇文章为例子:

    http://news.sina.com.cn/c/2017-09-05/doc-ifykpzey4568845.shtml

    因为简短,方便观看演示:

    GET请求:

    http://news.sina.com.cn/c/2017-09-05/doc-ifykpzey4568845.shtml

    现在的代码:

    抓取标题:

    title = soup.select('#artibodyTitle')[0].text

    抓取时间:

    涉及到拆分的过程:

    .contents的用法:

    拆分成两个部分

    .strip()的用法:

    移除特殊字符

    时间格式转化:

    from datetime import datetime

    字符串转时间:----strptime

    Dt = datetime.strptime(timesource,’%Y年%m月%d日%H:%M’)

    Dt

    这样我们就可以将数据转化并以正确的格式存储到数据库。

    时间转字符串:

    Dt.strftime(‘%Y-%m-%d’)

    抓取文章来源:

    source = soup.select('.time-source span a')[0].text

    抓取文章正文:

    正文抓取去除最后的“责任编辑”

    后缀加上[:-1]即可:

    article = soup.select('#artibody p')[:-1]

    为了将所有的文字内容合并:

    去除‘\u3000’,只需要使用.strip()

    .join()合并列表为字符串:

    上图是以一个空格连接内容

    至此代码:

    article = []

    for p in soup.select('#artibody p')[:-1]:

    article.append(p.text.strip())

    articles = ' '.join(article)

    print(articles)

    说明:

    为啥搞得那么复杂,其实是为了大家更充分理解各种正则操作,在实际的抓取网页时,一般是会将HTML标签等一同抓取。

    更简单的写法:

    获取作者:

    editor = soup.select('.article-editor')[0].text.lstrip('责任编辑:')

    移除责任编辑:

    .strip(‘责任编辑:’)

    或者:lstrip('责任编辑:')

    获取评论数:

    按照常规方法:

    结果为空?

    想到评论数可能是JavaScript动态加载的!

    通过开发者工具找到:

    http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-fykpzey4568845&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20&jsvar=loader_1504672931680_10534041

    分析URL,将改为:

    http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-(文章id)&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20

    如何获取新闻id:

    #url处理

    newsurl = 'http://news.sina.com.cn/c/2017-09-05/doc-ifykpzey4568845.shtml'

    newsid = newsurl.split('/')[-1].rstrip('.shtml').lstrip('doc-')

    print(newsid)

    或者re正则表达:

    JSON数据解析获取评论数量:

    comments = requests.get('http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-fykpzey4568845&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20')

    jd = json.loads(comments.text.strip('var data='))

    print(jd['result']['count']['total'])

    整理如下:


    注:本文属于原创文章,创作不易,转载请注明本文地址!

    作者QQ:1099718640

    CSDN博客主页:http://blog.csdn.net/dyboy2017

    Github开源项目:https://github.com/dyboy2017/spider

    相关文章

      网友评论

      • cemcoe:如果能把github里的教程文档用markdown写下可能会更好😀,doc无法预览很麻烦
        DYBOY:doc不可以下载吗?:hushed:

      本文标题:第五课 Python爬虫抓取新浪新闻的内容页

      本文链接:https://www.haomeiwen.com/subject/opfvjxtx.html