python爬取新闻门户网站的示例


Posted in Python onApril 25, 2021

项目地址:

https://github.com/Python3Spiders/AllNewsSpider

如何使用

每个文件夹下的代码就是对应平台的新闻爬虫

  1. py 文件直接运行
  2. pyd 文件需要,假设为 pengpai_news_spider.pyd

将 pyd 文件下载到本地,新建项目,把 pyd 文件放进去

项目根目录下新建 runner.py,写入以下代码即可运行并抓取

import pengpai_news_spider
pengpai_news_spider.main()

示例代码

百度新闻

# -*- coding: utf-8 -*-
# 文件备注信息       如果遇到打不开的情况,可以先在浏览器打开一下百度搜索引擎

import requests

from datetime import datetime, timedelta

from lxml import etree

import csv

import os

from time import sleep
from random import randint


def parseTime(unformatedTime):
    if '分钟' in unformatedTime:
        minute = unformatedTime[:unformatedTime.find('分钟')]
        minute = timedelta(minutes=int(minute))
        return (datetime.now() -
                minute).strftime('%Y-%m-%d %H:%M')
    elif '小时' in unformatedTime:
        hour = unformatedTime[:unformatedTime.find('小时')]
        hour = timedelta(hours=int(hour))
        return (datetime.now() -
                hour).strftime('%Y-%m-%d %H:%M')
    else:
        return unformatedTime


def dealHtml(html):
    results = html.xpath('//div[@class="result-op c-container xpath-log new-pmd"]')

    saveData = []

    for result in results:
        title = result.xpath('.//h3/a')[0]
        title = title.xpath('string(.)').strip()

        summary = result.xpath('.//span[@class="c-font-normal c-color-text"]')[0]
        summary = summary.xpath('string(.)').strip()

        # ./ 是直接下级,.// 是直接/间接下级
        infos = result.xpath('.//div[@class="news-source"]')[0]
        source, dateTime = infos.xpath(".//span[last()-1]/text()")[0], \
                           infos.xpath(".//span[last()]/text()")[0]

        dateTime = parseTime(dateTime)

        print('标题', title)
        print('来源', source)
        print('时间', dateTime)
        print('概要', summary)
        print('\n')

        saveData.append({
            'title': title,
            'source': source,
            'time': dateTime,
            'summary': summary
        })
    with open(fileName, 'a+', encoding='utf-8-sig', newline='') as f:
        writer = csv.writer(f)
        for row in saveData:
            writer.writerow([row['title'], row['source'], row['time'], row['summary']])


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
    'Referer': 'https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&word=%B0%D9%B6%C8%D0%C2%CE%C5&fr=zhidao'
}

url = 'https://www.baidu.com/s'

params = {
    'ie': 'utf-8',
    'medium': 0,
    # rtt=4 按时间排序 rtt=1 按焦点排序
    'rtt': 1,
    'bsst': 1,
    'rsv_dl': 'news_t_sk',
    'cl': 2,
    'tn': 'news',
    'rsv_bp': 1,
    'oq': '',
    'rsv_btype': 't',
    'f': 8,
}


def doSpider(keyword, sortBy = 'focus'):
    '''
    :param keyword: 搜索关键词
    :param sortBy: 排序规则,可选:focus(按焦点排序),time(按时间排序),默认 focus
    :return:
    '''
    global fileName
    fileName = '{}.csv'.format(keyword)

    if not os.path.exists(fileName):
        with open(fileName, 'w+', encoding='utf-8-sig', newline='') as f:
            writer = csv.writer(f)
            writer.writerow(['title', 'source', 'time', 'summary'])

    params['wd'] = keyword
    if sortBy == 'time':
        params['rtt'] = 4

    response = requests.get(url=url, params=params, headers=headers)

    html = etree.HTML(response.text)

    dealHtml(html)

    total = html.xpath('//div[@id="header_top_bar"]/span/text()')[0]

    total = total.replace(',', '')

    total = int(total[7:-1])

    pageNum = total // 10

    for page in range(1, pageNum):
        print('第 {} 页\n\n'.format(page))
        headers['Referer'] = response.url
        params['pn'] = page * 10

        response = requests.get(url=url, headers=headers, params=params)

        html = etree.HTML(response.text)

        dealHtml(html)

        sleep(randint(2, 4))
    ...


if __name__ == "__main__":
    doSpider(keyword = '马保国', sortBy='focus')

以上就是python爬取新闻门户网站的示例的详细内容,更多关于python爬取新闻门户网站的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python使用电子邮件模块smtplib的方法
Aug 28 Python
Python实现二分查找与bisect模块详解
Jan 13 Python
Python 读写文件的操作代码
Sep 20 Python
python 字符串追加实例
Jul 20 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
Python collections.defaultdict模块用法详解
Jun 18 Python
python实现简单的学生管理系统
Feb 22 Python
python 实现mysql自动增删分区的方法
Apr 01 Python
python+opencv实现视频抽帧示例代码
Jun 11 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
php xfocus防注入资料
2008/04/27 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
PHP学习之正则表达式
2011/04/17 PHP
php在线代理转向代码
2012/05/05 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
从头学Python之编写可执行的.py文件
2017/11/28 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
pytorch SENet实现案例
2020/06/24 Python
大三毕业自我鉴定
2014/01/15 职场文书
给全校老师的建议书
2014/03/13 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
小学班主任评语
2014/12/29 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android