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 Web开发框架Django
Jun 30 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
python在每个字符后添加空格的实例
May 07 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
如何使用repr调试python程序
Feb 28 Python
Python装饰器用法与知识点小结
Mar 09 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
Python 实现定积分与二重定积分的操作
May 26 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
隐性调用php程序的方法
2015/06/13 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
js静态作用域的功能。
2006/12/25 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python写入CSV文件的方法
2015/07/08 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
python绘制圆柱体的方法
2018/07/02 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
通信工程专业求职信
2014/06/04 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
4种非常实用的python内置数据结构
2021/04/28 Python