序言

文中的文本及图片来自互联网,仅作学习培训、沟通交流应用,不具备一切商业行为,如有什么问题请立即在线留言以作解决 。

刚触碰Python的初学者 、新手,能够拷贝下边的连接去收看Python的基本新手入门视频教学

https://v.douyu.com/author/y6AZ4jn9jwKW

基础开发工具

  • Python 3.6
  • Pycharm
import parsel
import requests
import re

总体目标网页分析

 


今日就抓取新闻中的国际要闻频道

 


点一下显示信息大量新闻内容

 


能够见到有关的api接口 ,里边有文章标题及其新闻详情的url地址

如何提取url地址

1、转为json,键值对赋值;
2、用正则表达式搭配url地址;

二种方式都能够完成,看本人爱好

依据插口数据信息连接中的pager 转变开展换页 ,其相匹配的便是页数。

 


宝贝详情能够见到新闻内容全是在 div标识里边 p 标识内 ,依照一切正常的解析网站就可以获得新闻内容。

储存方法

1 、你能储存txt文本方式
2 、还可以储存成PDF方式

总体抓取构思汇总

在频道目录页中,点一下大量新闻内容,获得插口数据信息url

插口数据信息url中回到的数据信息內容中搭配新闻报道宝贝详情url

应用基本解析网站实际操作(re、css、xpath)获取新闻内容

储存数据信息

编码完成

获得网页源代码

def get_html(html_url):
    """
    获得网页源代码 response
    :param html_url: 网页页面url地址
    :return: 网页源代码
    """
    response = requests.get(url=html_url, headers=headers)
    return response

 

获得每章新闻报道url地址

def get_page_url(html_data):
    """
    获得每章新闻报道url地址
    :param html_data: response.text
    :return:  每章新闻报道的url地址
    """
    page_url_list = re.findall('"url":"(.*?)"', html_data)
    return page_url_list

 

文档储存取名不可以带有特殊符号 ,必须对文章标题开展解决

def file_name(name):
    """
    文件命名不可以带上 特殊符号
    :param name:  文章标题
    :return: 无特殊符号的题目
    """
    replace = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
    new_name = re.sub(replace, '_', name)
    return new_name

 

储存数据信息

def download(content, title):
    """
    with open 储存新闻内容 txt
    :param content:  新闻内容
    :param title:   文章标题
    :return:
    """
    path = '新闻报道\\'   title   '.txt'
    with open(path, mode='a', encoding='utf-8') as f:
        f.write(content)
        print('已经储存', title)

 

主函数

def main(url):
    """
    主函数
    :param url:  新闻列表页 url地址
    :return:
    """
    html_data = get_html(url).text   # 得到 插口数据信息response.text
    lis = get_page_url(html_data)   # 得到 新闻报道url地址目录
    for li in lis:
        page_data = get_html(li).content.decode('utf-8', 'ignore')  # 新闻报道宝贝详情 response.text
        selector = parsel.Selector(page_data)
        title = re.findall('<title>(.*?)</title>', page_data, re.S)[0]  # 获得文章标题
        new_title = file_name(title)
        new_data = selector.css('#cont_1_1_2 div.left_zw p::text').getall()
        content = ''.join(new_data)
        download(content, new_title)


if __name__ == '__main__':
    for page in range(1, 101):
        url_1 = 'https://channel.chinanews.com/cns/cjs/gj.shtml?pager={}&pagenum=9&t=5_58'.format(page)
        main(url_1)

 

运作设计效果图

 

 

 

 

文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归去快排Seo www.SEOgurublog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▷61910465