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中的进程分支fork和exec详解
Apr 11 Python
Python中pygame安装方法图文详解
Nov 11 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
python生成随机图形验证码详解
Nov 08 Python
python实现批量解析邮件并下载附件
Jun 19 Python
python利用百度AI实现文字识别功能
Nov 27 Python
Python3爬虫全国地址信息
Jan 05 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
python+logging+yaml实现日志分割
Jul 22 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
浅析Python中字符串的intern机制
Oct 03 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
人大复印资料处理程序_补充篇
2006/10/09 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
php中Snoopy类用法实例
2015/06/19 PHP
php实现的递归提成方案实例
2015/11/14 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
JavaScript Date对象使用总结
2009/05/14 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
python求pi的方法
2014/10/08 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
工作自我评价分享
2013/12/01 职场文书
银行职员思想汇报
2013/12/31 职场文书
村委会主任先进事迹
2014/01/15 职场文书
网络营销实训总结
2015/08/03 职场文书
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL