TheCloudyun 2022-09-07 22:06 采纳率: 100%
浏览 48
已结题

python爬取小说的代码没有执行循环

想爬取这个网站的小说章节
import requests

from bs4 import BeautifulSoup

if name == 'main':
url = 'http://guoxue.lishichunqiu.com/gdxs/sanguoyanyi/' #对首页数据进行爬取
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ('
'KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27'}
page_text = requests.get(url=url,headers=headers).text
#在首页中解析出章节的标题和详情页的url
#1.实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
soup = BeautifulSoup(page_text,'lxml')
#解析章节标题和详情页url
li_list = soup.select('body > table:nth-child(8) > tbody > tr > td > table.box.no_doc > tbody > tr > td')
fp = open('./sanguo.txt','w',encoding='utf-8')
for li in li_list:
title = li.a.string
detail_url = li.a['href']
print(detail_url)
#对详情页发起请求,解析出章节内容
detail_page_text = requests.get(url=detail_url,headers=headers).text
#解析出详情页相关的章节内容
detail_soup = BeautifulSoup(detail_page_text,'lxml')
div_tag = detail_soup.find('div',id='content')
#解析到了章节的内容
content = div_tag.text
fp.write(title+':'+content+'\n')
print(title,'ok')

运行结果是只爬取了第一章,没有循环
试了url没什么问题,就是循环不执行,可能是title = li.a.string这条出了问题,但是我不知道怎么改
想要他执行循环爬取所有章节
  • 写回答

1条回答 默认 最新

  • 梦里逆天 2022-09-08 12:35
    关注

    这是按照你的改的,因为你没拿到链接。其实你这需求用re会更方便。

    
    import requests
    from bs4 import BeautifulSoup
    
    if __name__ == '__main__':
        url = 'http://guoxue.lishichunqiu.com/gdxs/sanguoyanyi/'  # 对首页数据进行爬取
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ('
                                 'KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27'}
        page_text = requests.get(url=url, headers=headers).text
        # print(page_text)
        # 在首页中解析出章节的标题和详情页的url
        # 1.实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
        soup = BeautifulSoup(page_text, 'lxml')
        # 提取含标题及链接的a标签
        list1 = soup.select('table.line_bottom > tbody > tr > td > table > tbody > tr > td > a')
        # print(list1)
        with open('./sanguo.txt', 'w', encoding='utf-8') as fp:
            for li in list1:
                # print(li)
                # 解析章节标题和详情页url
                title = li['title']
                detail_url = li['href']
                print(title, detail_url)
                # 对详情页发起请求,解析出章节内容
                detail_page_text = requests.get(url=detail_url, headers=headers).text
                # 解析出详情页相关的章节内容
                detail_soup = BeautifulSoup(detail_page_text, 'lxml')
                div_tag = detail_soup.find('div', id='content')
                # 解析到了章节的内容
                content = div_tag.text
                fp.write(title + ':' + content + '\n')
                print(title, 'ok')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 修改了问题 9月8日
  • 创建了问题 9月7日

悬赏问题

  • ¥100 关于加载卡的问题有能知道这个要怎么处理吗?
  • ¥100 rtmpose姿态评估
  • ¥15 java 通过反射找路径下的类,打包后就找不到
  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。