欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬取学习猿地网站猿圈的文章列表(标题、作者、链接、时间)

程序员文章站 2022-03-02 19:38:43
...
import requests
from bs4 import BeautifulSoup
import json


class bs4YQ():
    url = 'https://www.lmonkey.com/t'
    headers = {
        'user-agent': # 自己设置即可
    }
    # 响应源代码的存放位置
    res_html = None
    # 存储解析后的数据
    info = []

    # 初始化方法
    def __init__(self):
        # 初始化请求对象
        res = requests.get(url=self.url, headers=self.headers)
        if res.status_code == 200:
            print('请求成功')
            self.res_html = res.text
            if self.ParseData():
                self.WriteJson()  # 如果解析成功,则写入数据
                print('succeed')
        else:
            print('请求失败')

    # 定义解析html数据的方法
    def ParseData(self):
        bs = BeautifulSoup(self.res_html, 'lxml')  # BeautifulSoup 的实例化
        # 先找出文章模块所在列表区域,再从该区域解析标题、作者
        try:
            # 文章列表
            lists = bs.find_all(
                'div', {'class': 'list-group-item list-group-item-action p-06'}
            )  # find_all返回一个列表
            for i in lists:
                # 找每个文章列表里的标题
                titles = i.find(
                    'div', {'class', 'topic_title mb-0 lh-180'}
                )
                if titles:
                    # 用一个字典存储查找的相应数据
                    infodict = {
                        'title': titles.text.split('\n')[0],
                        'author': i.strong.a.text,
                        'url': i.a['href'],
                        'time': i.span['title']
                    }
                    self.info.append(infodict)
            return True
        except:
            return False

    # 定义写入json数据的方法
    def WriteJson(self):
        # 判断数据是否找到并存入初始化列表
        if self.info is not None:
            try:
                # 写入
                with open('./yq.json', 'w', encoding='utf-8') as fp:
                    json.dump(self.info, fp)
                return True
            except:
                return False
        else:
            print('无法获取解析数据')
            return False


# 设置入口
if __name__ == '__main__':
    bs4YQ()
相关标签: 爬虫 python