使用Python抓取helloworld上的文章

狡猾的骗骗花
• 阅读 1522

嘿嘿嘿,py真好玩

代码写得很渣,本着能跑就好的原则,就这样啦~
import os
from requests_html import HTMLSession
import sqlite3
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent
domain = "https://www.helloworld.net"

class Helloworld:

    def __init__(self):
        self.con = sqlite3.connect(str(BASE_DIR) + "\\data\\helloworld.db", timeout=10)
        # 引入sqlite3 是想存储到数据库来着
        self.session = HTMLSession()

    def getContent(self, p, saveToFile=False):
        req = self.session.get(domain + p)
        p = p.split('/')
        if req.status_code != 200:
            print("获取失败")
            return False
        author = req.html.find(".author-info", first=True)
        data = {}
        data['pubtime'] = author.xpath('//span[@title="发布时间"]//time/text()')[0].strip()
        data['yuedushu'] = author.xpath('//span[@title="阅读数"]/text()')[0].strip()
        data['zan'] = author.xpath('//span[@title="点赞数"]/text()')[0].strip()
        data['shoucang'] = author.xpath('//span[@title="收藏数"]/text()')[0].strip()
        data['content'] = req.html.find("article>div[id='htmlContent']", first=True).html
        print(data)
        if saveToFile:
            data['save_path'] = os.path.join(BASE_DIR, "data") + p[2] + ".html"
            # 创建文件
            f = open(data['save_path'], 'wb')
            f.write(bytes(data['content'], encoding="utf8"))
            f.close()
        return data

    def getArticleList(self, hot=False, callback=None):
        url = domain
        if hot:
            # 是否按照热门爬取
            url += "?sort = hottest"

        req = self.session.get(url)
        if req.status_code != 200:
            print("获取失败")
            return False
        blog_list_container = req.html.find(".blog_list_container>div.blog-item")
        dataSet = []
        for item in blog_list_container:
            data = {}
            author = {}
            leftItem = item.find(".item-left", first=True)
            data['p'] = leftItem.xpath('//a/@href')[0]
            data['short_desc'] = leftItem.find("p", first=True).text
            author['path'] = leftItem.find(".infos .pre-infos", first=True).xpath("//a/@href")[0]
            author['portrait'] = leftItem.find(".infos .pre-infos a", first=True).xpath("//img/@src")[0]
            author['nickname'] = leftItem.find(".infos .pre-infos .nickname", first=True).text
            data['time'] = leftItem.find(".infos .pre-infos .time", first=True).text
            data['yuedushu'] = \
                leftItem.find(".infos .after-infos", first=True).xpath(
                    '//div[@title="阅读数"]//span[@class="name"]/text()')[
                    0].strip()
            data['zan'] = \
                leftItem.find(".infos .after-infos", first=True).xpath(
                    '//div[@title="点赞数"]//span[@class="name"]/text()')[
                    0].strip()
            rightItem = item.find(".item-right", first=True)
            data['cover_image'] = ''
            if rightItem:
                # 获取封面
                data['cover_image'] = rightItem.xpath("//img/@src")
                if data['cover_image']:
                    data['cover_image'] = data['cover_image'][0]
            data['author'] = author
            # 获取文章内容部分
            dataSet.append(data)
            if callback:
                callback(data)
            print(data)
        return dataSet


def mycallback(data):
    c = Helloworld().getContent(p=data.p, saveToFile=False)
    # 嘿嘿嘿

if __name__ == '__main__':
    Helloworld().getArticleList(callback=mycallback)
    # c = Helloworld().getContent(p='/p/14G4HKmhx2FLe')

文章有个分页的问题,可以用selenium解决吧

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
狡猾的骗骗花
狡猾的骗骗花
Lv1
男 · 小太阳幼稚园 · 学生
_(:з」∠)_ 我好惨啊
文章
5
粉丝
2
获赞
7