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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
python中Genarator函数用法分析
Apr 08 Python
基于Python闭包及其作用域详解
Aug 28 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
对python 命令的-u参数详解
Dec 03 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
Pycharm github配置实现过程图解
Oct 13 Python
如何在pycharm中安装第三方包
Oct 27 Python
python实现简单反弹球游戏
Apr 12 Python
变长双向rnn的正确使用姿势教学
May 31 Python
Python echarts实现数据可视化实例详解
Mar 03 Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
You might like
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
linux下php上传文件注意事项
2016/06/11 PHP
如何离线执行php任务
2017/02/21 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
JS 建立对象的方法
2007/04/21 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
Python图像灰度变换及图像数组操作
2016/01/27 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python提取log文件内容并画出图表
2019/07/08 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
历史学专业推荐信
2013/11/06 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
三方协议书范本
2014/04/22 职场文书
成立公司计划书
2014/05/07 职场文书
物流管理专业求职信
2014/05/29 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
教师节晚会主持词
2015/06/30 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL