凹凸曼大人 发表于 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.string
      gushici_2 = gushici.string
      gushi1 = gushici_1 + "————" + gushici_2
      rows.append(gushi1)
    rows.pop()
    rows.pop(0)#去除第一项
    row.pop()#去除最后一项
    c = [(raw + rows) 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# 每隔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)# 每隔一秒
















凹凸曼大人 发表于 2019-11-5 17:47

成品在这里 是古诗句..每天一句 补充下自己。。

凹凸曼大人 发表于 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

不会用咋办........
页: [1] 2 3
查看完整版本: 【Python爬虫】爬取古诗词,按类别采集