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 循环while和for in简单实例
Aug 16 Python
python实现媒体播放器功能
Feb 11 Python
tensorflow实现softma识别MNIST
Mar 12 Python
python实现公司年会抽奖程序
Jan 22 Python
python批量爬取下载抖音视频
Jun 17 Python
浅谈python3中input输入的使用
Aug 02 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
Flask缓存静态文件的具体方法
Aug 02 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
OpenCV-Python实现轮廓的特征值
Jun 09 Python
virtualenv隔离Python环境的问题解析
Jun 21 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
NT IIS下用ODBC连接数据库
2006/10/09 PHP
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
简单实现PHP留言板功能
2016/12/21 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
微信小程序 出现错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}解决办法
2017/02/23 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
新手简单了解vue
2019/05/29 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
使用python编写监听端
2018/04/12 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
jupyter notebook 重装教程
2020/04/16 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
统计员岗位职责
2013/11/14 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
聘任书范文大全
2015/09/21 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
Python数据分析之绘图和可视化详解
2021/06/02 Python
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android