为什么爬取的内容保存为txt文本,文件里没有内容的?
代码如下:
import requests
from bs4 import BeautifulSoup
url = 'https://www.shicimingju.com/book/luotongsaobei.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.69'
}
page = requests.get(url = url,headers = headers)
page.encoding = 'utf-8'
page_text = page.text
print(page_text)
soup = BeautifulSoup(page_text,'lxml')
li_list = soup.select('.book-mulu > ul > li')
fp = open('./luotongsaobei.txt', 'w' ,encoding= 'utf-8')
for li in li_list:
title = li.a.string
detail_url += 'http://www.shicimingju.com' + li.a['href']
detail_page_text = requests.get(url = detail_url, headers = headers).text
soup = BeautifulSoup(detail_page_text,"html.parser")
content = soup.find("div", class_="chapter_content").text.strip()
fp.write(title + '/n' + content + '/n')
print(title,'爬取成功')
fp.close()
您的代码存在一些问题,包括选择器不正确、变量名不规范以及代码逻辑错误。我将为您修改代码,以使其能够正常运行。
import requests
from bs4 import BeautifulSoup
url = 'https://www.shicimingju.com/book/luotongsaobei.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.69'
}
page = requests.get(url, headers=headers)
page.encoding = 'utf-8'
page_text = page.text
soup = BeautifulSoup(page_text, 'lxml')
li_list = soup.find_all('li', class_='book-mulu') # 使用find_all来选择所有符合条件的元素
with open('./luotongsaobei.txt', 'w', encoding='utf-8') as fp:
for li in li_list:
title = li.find('a').string # 获取<a>标签的文本内容
detail_url = 'http://www.shicimingju.com' + li.find('a')['href'] # 获取<a>标签的href属性值并拼接成完整链接
detail_page = requests.get(detail_url, headers=headers)
detail_page_text = detail_page.text
detail_soup = BeautifulSoup(detail_page_text, "html.parser")
content = detail_soup.find("div", class_="chapter_content").text.strip() # 获取符合条件的div标签的文本内容
fp.write(title + '\n' + content + '\n') # 使用\n作为换行符
print(title, '爬取成功')
请注意,此代码仅用于演示目的,并且可能无法处理所有情况。在实际应用中,您可能需要根据具体情况进行修改和优化。