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日

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan