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二分法搜索算法实例分析
May 11 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
使用pyecharts无法import Bar的解决方案
Apr 23 Python
python实现媒体播放器功能
Feb 11 Python
解决Python安装后pip不能用的问题
Jun 12 Python
Python selenium根据class定位页面元素的方法
Feb 26 Python
python交易记录链的实现过程详解
Jul 03 Python
Python csv模块使用方法代码实例
Aug 29 Python
详解pyinstaller生成exe的闪退问题解决方案
Jun 19 Python
django创建css文件夹的具体方法
Jul 31 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
php通过各种函数判断0和空
2020/07/04 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
javascript静态的url如何传递
2007/05/03 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
原生js实现验证码功能
2017/03/16 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
python查看模块,对象的函数方法
2018/10/16 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
就业表自我评价分享
2014/02/06 职场文书
学位证书委托书
2014/09/30 职场文书
小学运动会加油稿
2015/07/22 职场文书
诚实守信主题班会
2015/08/13 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
银行工作心得体会范文
2016/01/23 职场文书
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技