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中的lambda表达式的用法
Aug 28 Python
python开发中module模块用法实例分析
Nov 12 Python
python使用psutil模块获取系统状态
Aug 27 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
详解python Todo清单实战
Nov 01 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
python实现扫雷小游戏
Apr 24 Python
python中的yield from语法快速学习
Nov 06 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 Python
python实现简单的三子棋游戏
Apr 28 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
桌面中心(一)创建数据库
2006/10/09 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python解决鸡兔同笼问题的方法
2014/12/20 Python
Python运算符重载用法实例分析
2015/06/01 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
学校门卫岗位职责范本
2014/06/30 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
个人党性锻炼总结
2015/03/05 职场文书
基层工作经历证明
2015/06/19 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
 Python 中 logging 模块使用详情
2022/03/03 Python