鱼C论坛

 找回密码
 立即注册
查看: 1191|回复: 2

[已解决]爬取存到Redis数据库

[复制链接]
发表于 2023-6-4 16:22:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问大佬们,这个爬取到的想存到Redis中该怎么写呢
  1. import requests
  2. import logging


  3. index_url = 'https://spa1.scrape.center/api/movie/?limit=10&offset={}'
  4. detail_url = 'https://spa1.scrape.center/api/movie/{}/'
  5. header = {
  6.    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
  7. }
  8. logging.basicConfig(level=logging.INFO,format = '%(asctime)s - %(levelname)s: %(message)s')


  9. #发起请求
  10. def scrapy_api(index_url):
  11.     logging.info('正在爬取{}...'.format(index_url))
  12.     try:
  13.         response = requests.get(url=index_url,headers=header,verify=False)
  14.         if response.status_code == 200:
  15.             return response.json()
  16.         logging.error('爬取代码为{},爬取{}失败'.format(response.status_code,index_url))
  17.     except requests.RequestException:
  18.         logging.error('爬取{}失败'.format(index_url),exc_info=True)

  19. #爬取列表页
  20. def scrape_index(page):
  21.     page_url = index_url.format(10*(page-1))
  22.     return scrapy_api(page_url)

  23. #拼接url并发起请求
  24. def scrape_detail(id):
  25.     url = detail_url.format(id)
  26.     return scrapy_api(url)



  27. def main():
  28.     for page in range(1,3):
  29.         index_data = scrape_index(page)
  30.         for item in index_data.get('results'):
  31.             id = item.get('id')
  32.             detail_data = scrape_detail(id)
  33.             logging.info('detail data {}'.format(detail_data))
  34.             
  35.    


  36. if __name__ == '__main__':
  37.     main()
复制代码
最佳答案
2023-6-4 16:34:41
在您的代码中,您需要导入redis模块,并创建一个redis数据库连接。然后在循环中将爬取到的数据存储到redis数据库中。

首先,您需要安装python的redis库,可以通过以下命令安装:

  1. pip install redis
复制代码


以下是一个简单的示例代码:

  1. import requests
  2. import logging
  3. import redis

  4. index_url = 'https://spa1.scrape.center/api/movie/?limit=10&offset={}'
  5. detail_url = 'https://spa1.scrape.center/api/movie/{}/'
  6. header = {
  7.    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
  8. }
  9. logging.basicConfig(level=logging.INFO,format = '%(asctime)s - %(levelname)s: %(message)s')

  10. # 创建redis连接
  11. r = redis.Redis(host='localhost', port=6379, db=0)


  12. def scrapy_api(index_url):
  13.     logging.info('正在爬取{}...'.format(index_url))
  14.     try:
  15.         response = requests.get(url=index_url,headers=header,verify=False)
  16.         if response.status_code == 200:
  17.             return response.json()
  18.         logging.error('爬取代码为{},爬取{}失败'.format(response.status_code,index_url))
  19.     except requests.RequestException:
  20.         logging.error('爬取{}失败'.format(index_url),exc_info=True)


  21. def scrape_index(page):
  22.     page_url = index_url.format(10*(page-1))
  23.     return scrapy_api(page_url)


  24. def scrape_detail(id):
  25.     url = detail_url.format(id)
  26.     return scrapy_api(url)


  27. def main():
  28.     for page in range(1,3):
  29.         index_data = scrape_index(page)
  30.         for item in index_data.get('results'):
  31.             id = item.get('id')
  32.             detail_data = scrape_detail(id)
  33.             logging.info('detail data {}'.format(detail_data))

  34.             # 将数据保存到redis
  35.             r.set(f'movie:{id}', str(detail_data))
  36.             

  37. if __name__ == '__main__':
  38.     main()
复制代码


这里,我们将每一部电影的详细信息存储在redis中,key是 movie:{id} ,value是电影的详细信息。我们使用 str() 将字典转换为字符串,因为redis无法直接存储字典对象。

这是一个非常基础的示例,根据您的实际需要,您可能需要对数据进行进一步的处理,例如序列化和反序列化,以及错误处理等。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-4 16:34:41 | 显示全部楼层    本楼为最佳答案   
在您的代码中,您需要导入redis模块,并创建一个redis数据库连接。然后在循环中将爬取到的数据存储到redis数据库中。

首先,您需要安装python的redis库,可以通过以下命令安装:

  1. pip install redis
复制代码


以下是一个简单的示例代码:

  1. import requests
  2. import logging
  3. import redis

  4. index_url = 'https://spa1.scrape.center/api/movie/?limit=10&offset={}'
  5. detail_url = 'https://spa1.scrape.center/api/movie/{}/'
  6. header = {
  7.    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
  8. }
  9. logging.basicConfig(level=logging.INFO,format = '%(asctime)s - %(levelname)s: %(message)s')

  10. # 创建redis连接
  11. r = redis.Redis(host='localhost', port=6379, db=0)


  12. def scrapy_api(index_url):
  13.     logging.info('正在爬取{}...'.format(index_url))
  14.     try:
  15.         response = requests.get(url=index_url,headers=header,verify=False)
  16.         if response.status_code == 200:
  17.             return response.json()
  18.         logging.error('爬取代码为{},爬取{}失败'.format(response.status_code,index_url))
  19.     except requests.RequestException:
  20.         logging.error('爬取{}失败'.format(index_url),exc_info=True)


  21. def scrape_index(page):
  22.     page_url = index_url.format(10*(page-1))
  23.     return scrapy_api(page_url)


  24. def scrape_detail(id):
  25.     url = detail_url.format(id)
  26.     return scrapy_api(url)


  27. def main():
  28.     for page in range(1,3):
  29.         index_data = scrape_index(page)
  30.         for item in index_data.get('results'):
  31.             id = item.get('id')
  32.             detail_data = scrape_detail(id)
  33.             logging.info('detail data {}'.format(detail_data))

  34.             # 将数据保存到redis
  35.             r.set(f'movie:{id}', str(detail_data))
  36.             

  37. if __name__ == '__main__':
  38.     main()
复制代码


这里,我们将每一部电影的详细信息存储在redis中,key是 movie:{id} ,value是电影的详细信息。我们使用 str() 将字典转换为字符串,因为redis无法直接存储字典对象。

这是一个非常基础的示例,根据您的实际需要,您可能需要对数据进行进一步的处理,例如序列化和反序列化,以及错误处理等。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-4 16:37:28 | 显示全部楼层
isdkz 发表于 2023-6-4 16:34
在您的代码中,您需要导入redis模块,并创建一个redis数据库连接。然后在循环中将爬取到的数据存储到redis ...

好的,感谢感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表