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

利用BeautifulSoup4爬取猿圈

程序员文章站 2022-05-02 22:01:35
...
import requests
import json
from bs4 import BeautifulSoup

'''
数据源地址: https://www.lmonkey.com/t
爬取的数据内容:文章的标题,url,作者,发布时间
使用工具:requests, bs4
'''


class Yq():
    # 定义请求的url
    url = 'https://www.lmonkey.com/t'

    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
    }

    # 存放爬取到的数据地址
    res_html = None

    # 存储解析后的数据
    varlist = []

    # 初始化方法
    def __init__(self):
        # 发送请求
        result = requests.get(url=self.url, headers=self.headers)

        # 判断请求是否成功,并获取请求的源代码
        if result.status_code == 200:
            print('数据请求成功')
            self.res_html = result.text
            if self.parsedata():
                self.writedata()
        else:
            print('数据请求失败')

    # 解析数据
    def parsedata(self):
        print('正在解析数据...')
        try:
            soup = BeautifulSoup(self.res_html, 'lxml')

            # 获取页面中所有的文章
            divs = soup.find_all('div', class_="list-group-item list-group-item-action p-06")
            for i in divs:
                title = i.find('div', class_="topic_title mb-0 lh-180")
                if title:
                    # split('\n')[0]: 使用\n字符分隔字符串,获取分割后的第一个字符串
                    vardict = {'title': title.text.split('\n')[0],
                               'url': i.a['href'],
                               'author': i.strong.a.text,
                               'date': i.span['title']}
                    self.varlist.append(vardict)
            print('数据解析成功')
            return True
        except:
            print('数据解析时出现异常!')
            return False

    # 写入数据
    def writedata(self):
        if self.varlist != []:
            try:
                with open('./yq.json', 'w', encoding='utf-8', ) as fp:
                    json.dump(self.varlist, fp, ensure_ascii=False)
                print('写入数据成功!')
                return True
            except:
                print('写入数据时发生异常!')
                return False
        else:
            print('无法获取当前解析的数据!')
            return False

# 实例化类
Yq()

相关标签: python 爬虫