lab02: 爬七猫一部小说
2022-10-27 本文已影响0人
水水壶
爬这个七猫小说,只能爬到19章,后面的是需要会员的没有办法爬,问题就是我爬完第一章之后要爬第二张,那我的爬的网址需要变,我开始分析第一章网址(https://www.qimao.com/shuku/222767-16480917400001/)和第二章网址(https://www.qimao.com/shuku/222767-16480917400002/)的规律,发现就是后面的数字加1,第三章、第四章也是符合这个规律,所以我写了一个循当第一章爬完之后就 把后面这个数16480917400001+1,前五章都可以顺利爬下来,到第六章就报错了,从第六章就不是按着这个规律来的了。最后我是先爬第一章找到页面下一章的位置,然后获取 a 标签 href 属性的链接,就是下一章的链接.
# lab02: 爬一整部小说(https://www.qimao.com/reader/index/1648167/)
# 问题: 小说阅读页面点右键不显示"检查"
# 解决方案:在浏览器窗口的右上方选择Chrome菜单, 然后选择工具 > 开发者工具
# 先把源代码
# 找到小说段落,存储段落
# 判断是否有下一章,有 点击下一页,爬取下一页源代码,
import requests
from bs4 import BeautifulSoup
def fetch_data(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
original_data = requests.get(url, headers=headers)
with open('lab02.html', 'w') as f:
f.write(original_data.text)
def parse_data():
with open('lab02.html') as f:
original_data = f.read()
article_soup = BeautifulSoup(original_data, 'html.parser')
article = article_soup.find("div", attrs={"class": "chapter-detail-article" })
next_page = article_soup.find("a", attrs={"class": "qm-btn inline-block important large"})
return [article, next_page]
def handle_data():
print('111')
resp = parse_data()
print(resp)
with open('lab02.csv', 'a') as f:
f.write(resp[0].text)
f.write('\n')
page_link = resp[1]['href']
print('链接:{}:'.format(page_link))
return page_link
if __name__ == '__main__':
page_link = '/shuku/1648167-16517458210001/'
while True:
url = 'https://www.qimao.com{}'.format(page_link)
fetch_data(url)
parse_data()
page_link = handle_data()
print(page_link)
if page_link == None:
break