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的Django框架中实现Hacker News的一些功能
Apr 17 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python实现分割文件及合并文件的方法
Jul 10 Python
python使用turtle库绘制树
Jun 25 Python
Python实现常见的回文字符串算法
Nov 14 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
python生成器用法实例详解
Nov 22 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
Pandas搭配lambda组合使用详解
Jan 22 Python
Python实现归一化算法详情
Mar 18 Python
python游戏开发之pygame实现接球小游戏
Apr 22 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
PHP PDO函数库详解
2010/04/27 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python实现excel转sqlite的方法
2017/07/17 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
python 实现音频叠加的示例
2020/10/29 Python
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
室内设计自我鉴定
2013/10/15 职场文书
人事专员的职责
2014/02/26 职场文书
大学生新学期计划书
2014/04/28 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
心理学专业求职信
2014/06/16 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
行政前台岗位职责
2015/04/16 职场文书
奠基仪式致辞
2015/07/30 职场文书
Python基础详解之描述符
2021/04/28 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python