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 相关文章推荐
浅谈MySQL中的触发器
May 05 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
python Django 创建应用过程图示详解
Jul 29 Python
django连接oracle时setting 配置方法
Aug 29 Python
利用python画出AUC曲线的实例
Feb 28 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
Python项目跨域问题解决方案
Jun 22 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
php for 循环语句使用方法详细说明
2010/05/09 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
vuex 的简单使用
2018/03/22 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
Python之用户输入的实例
2018/06/22 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
详解python logging日志传输
2020/07/01 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
可贵的沉默教学反思
2014/02/06 职场文书
幼儿园老师寄语
2014/04/03 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
教师素质教育心得体会
2016/01/19 职场文书
Python基本知识点总结
2022/04/07 Python