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实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
Python打印输出数组中全部元素
Mar 13 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
详解django2中关于时间处理策略
Mar 06 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
python实现滑雪游戏
Feb 22 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
Python的in,is和id函数代码实例
Apr 18 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 Python
python复合条件下的字典排序
Dec 18 Python
python使用pygame创建精灵Sprite
Apr 06 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
php设计模式 Proxy (代理模式)
2011/06/26 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
PHP 8新特性简介
2020/08/18 PHP
图片自动更新(说明)
2006/10/02 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
名人演讲稿范文
2013/12/28 职场文书
酒店员工检讨书
2014/02/18 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
财务会计专业自荐书
2014/06/30 职场文书
环保守法证明
2015/06/24 职场文书
Python进程间的通信之语法学习
2022/04/11 Python
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers