吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6648|回复: 23
收起左侧

[Python 转载] 【Python爬虫】爬取古诗词,按类别采集

[复制链接]
凹凸曼大人 发表于 2019-11-4 22:57
话不多直接上代码。自己也是刚学Python,写这个写了两天了。。代码不是很整洁。大神勿喷。。





[Python] 纯文本查看 复制代码
from bs4 import BeautifulSoup
import requests
import json
import re
import time
def get_one_page(url):
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
        }
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            response.encoding = "UTF-8"
            return response.text
    except requests.ConnectionError:
        return None
def choice_jiekou():  # 抓取每个风格的地址
    URL = "https://www.gushiwen.org/shiju/xiejing.aspx"
    html = requests.get(URL).text
    soup = BeautifulSoup(html, 'lxml')
    gushi_1 = soup.find_all("div", {"class":"cont"})
    raws = []
    for gushi in gushi_1:
        gushi = gushi.findAll(href=re.compile("shiju"))
        for jiekou in gushi:
            raws.append(jiekou['href'])
    return raws
def parse_one_page(html):  #每个风格的诗句
    soup = BeautifulSoup(html, 'lxml')
    gushi_1 = soup.find_all("div", {"class": "cont"})
    rows = []
    row = []
    raw = []
    gushibiaoti_1 = soup.find_all("div", {"class": "title"})
    for gushibiaoti in gushibiaoti_1: #找到标题
        for biaoti1 in gushibiaoti.stripped_strings:
            biaoti = repr(biaoti1)
        row.append(biaoti)
    for gushi2 in gushi_1: #找到每个诗句第几句
        gushi2 = gushi2.findAll(style='float:left;')
        for jiekou in gushi2:
            raw.append(jiekou.string)
    for gushi in gushi_1:#找到诗句
        gushici = gushi.find_all('a')
        gushici_1 = gushici[0].string
        gushici_2 = gushici[1].string
        gushi1 = gushici_1 + "————" + gushici_2
        rows.append(gushi1)
    rows.pop()
    rows.pop(0)#去除第一项
    row.pop()#去除最后一项
    c = [(raw[i] + rows[i]) for i in range(0, len(raw))]
    e = [' ']
    d = row + e + c + e
    return d
jiekou = choice_jiekou() # 每个接口地址提取出来 赋值给jiekou
changdu = len(jiekou) # 计算多少条接口地址
def dizhi():  # 把地址罗列出来
    URL = ['https://www.gushiwen.org/'+x for x in jiekou] # 把接口合成地址
    dizhi = tuple(URL) #列表 转元组完美。。
    return dizhi
dizhi1 = dizhi()
def writeInfomation(content):#写到文本
    with open("gushi3.txt", "a+", encoding='utf-8') as f: #定义格式 utf-8
        f.write(json.dumps(content, ensure_ascii=False) + "\n")
def main(offset):
    url = dizhi1[offset]# 每隔1秒解析一个地址
    html = get_one_page(url)
    for item in parse_one_page(html):
        print(item)
        writeInfomation(item)
if __name__ == '__main__':
    for i in range(changdu):
        main(offset=i)
        time.sleep(1)# 每隔一秒
















免费评分

参与人数 4吾爱币 +4 热心值 +3 收起 理由
linhai001 + 1 + 1 谢谢@Thanks!
楠宝 + 1 用心讨论,共获提升!
jqh777 + 1 + 1 很nb 全面 够仔细 感谢分享
huguo002 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 凹凸曼大人 发表于 2019-11-5 17:47
gushi3.txt (621.98 KB, 下载次数: 139)   成品在这里 是古诗句..每天一句 补充下自己。。
 楼主| 凹凸曼大人 发表于 2020-3-2 12:48
Bayonet 发表于 2020-2-24 08:24
楼主,学了多久可以写出这样的代码??本人小白一枚。

学了1星期吧  去图书馆借了5本书 都是基础的。 网上下载了很多电子书。 看书自己就能明白很多 每天看个几小时就好了
迦南圣经 发表于 2019-11-5 10:23
weeee4 发表于 2019-11-11 17:28
刚学就有这能力不错了,就是代码不够简洁
huamu 发表于 2019-11-11 17:36
感谢楼主分享
 楼主| 凹凸曼大人 发表于 2019-11-11 21:03
确实。。不够简洁 写这个代码  我用了8个.py 文件 一个一个尝试 。 最后拼接起来  实现自己需要的所有功能。。
头像被屏蔽
万里绿枫叶 发表于 2019-12-12 08:28
提示: 作者被禁止或删除 内容自动屏蔽
独在黑夜看狐面 发表于 2020-1-22 17:05
谢谢分享~~~
stefaniema 发表于 2020-2-23 20:28
楼主是中学生吗?
18740559703 发表于 2020-2-24 18:31
不会用咋办........
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 13:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表