Python爬虫MongoDB、Redis

一、需求分析

目标网站:

白马酒店 - 阿加莎·克里斯蒂 - 小说在线阅读 - 努努书坊 (kanunu8.com)
​www.kanunu8.com/tuili/9512/

目标内容:

阿加莎·克里斯蒂《白马酒店》的第一到二十五章的所有内容。

任务分解:编写2个爬虫

爬虫①:从https://www.kanunu8.com/tuili/9512/获取小说《白马酒店》第一到二十五章的网址,并将网址添加到Redis里名为url_queue的列表中;
爬虫②:从Redis里名为url_queue 的列表中读出网址,进入网址爬取每一章的具体内容,再将内容保存到MongoDB中。

涉及的知识点:

使用requests获取网页源代码
使用XPath从网页源代码中提取数据
使用Redis与MongoDB读/写数据

我的源代码:
import requests
from lxml import etree
import redis
from pymongo import MongoClient

# UA伪装
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203'
}
base_url = 'https://www.kanunu8.com/tuili/9512/'

response = requests.get(url=base_url, headers=headers)
# print(response.content.decode('gb2312'))
selector = etree.HTML(response.content.decode('gb2312'))
url_list = selector.xpath('//td/table/tbody/tr/td/a/@href')
url_list = url_list[1:]
# print([url for url in url_list])
# 实例化Redis客户端
redis_cli = redis.StrictRedis()

# 实例化MongoDB客户端
mongodb_cli = MongoClient()
mongodb = mongodb_cli['story']
handler = mongodb['baimajiudian']

for url in url_list:
    url = base_url + url
    redis_cli.lpush('url_queue', url)

content_list = []
while redis_cli.llen('url_queue') > 0:
    url = redis_cli.rpop('url_queue').decode()
    source = requests.get(url).content.decode('gbk')
    # print(source)
    # break
    selector = etree.HTML(source)
    chapter_name = selector.xpath('//strong/font/text()')[0]
    # print(chapter_name)
    # break
    content = selector.xpath('//p')[0]
    content = content.xpath('string(.)')
    # print(content)
    # break
    content_list.append({'title': chapter_name, 'content': '\n'.join(content)})
handler.insert_many(content_list)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值