翼度科技»论坛 编程开发 python 查看内容

爬取豆瓣Top250图书数据

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
爬取豆瓣Top250图书数据

项目的实现步骤
1.项目结构
2.获取网页数据
3.提取网页中的关键信息
4.保存数据
1.项目结构

2.获取网页数据
对应的网址为https://book.douban.com/top250

  1. import requests
  2. from bs4 import BeautifulSoup
  3. """
  4. 获取网页数据,解析数据,将相应的数据传出
  5. """
  6. def get_page(url):
  7.     headers = {
  8.         'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) '
  9.                      'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 '
  10.                      'Mobile Safari/537.36 Edg/114.0.1823.43'
  11.     }
  12.     resp=requests.get(url,headers=headers)
  13.     soup=BeautifulSoup(resp.text,'html.parser')
  14.     return soup
复制代码
3.提取网页中的关键信息
获取传出的解析后的数据,获取对应的图片,书名,作者,价格,评价,简介
  1. from geturlcocument.get_document import get_page
  2. import re
  3. # 初始数据
  4. pictures=[]
  5. names=[]
  6. authors=[]
  7. prices=[]
  8. scores=[]
  9. sums=[]
  10. def get_single():
  11.     # 网址地址
  12.     urls = [f"https://book.douban.com/top250?start={num}" for num in range(0,250,25)]
  13.     for url in urls:
  14.         # 获取对应的网页文本
  15.         text = get_page.get_page(url)
  16.         # 所有数据的集合
  17.         all_tr = text.find_all(name="tr", attrs={"class": "item"})
  18.         # 查找每个单项
  19.         for tr in all_tr:
  20.             # 数据类型:图片,书名,作者,价格,评分,简介
  21.             # 图片
  22.             picture = tr.find(name="img")
  23.             picture = picture.get('src')
  24.             # print(picture)
  25.             # 书名
  26.             div = tr.find(name='div', attrs={'class': 'pl2'})
  27.             name = div.find('a').text
  28.             name = re.sub(r'\s+', '', name)
  29.             # 作者
  30.             author = tr.find(name='p', attrs={'class': 'pl'}).text
  31.             author = author.split('/')[0]
  32.             # 价格
  33.             price = author.split('/')[-1]
  34.             price = re.sub(r'元', '', price)
  35.             # 评分
  36.             score = tr.find(name='span', attrs={'class': 'rating_nums'}).text
  37.             try:
  38.                 sum = tr.find(name='span', attrs={'class': 'inq'}).text
  39.             except AttributeError:
  40.                 sum = ''
  41.             pictures.append(picture)
  42.             names.append(name)
  43.             authors.append(author)
  44.             prices.append(price)
  45.             scores.append(score)
  46.             sums.append(sum)
  47.     data = {
  48.         "picture": pictures,
  49.         "name": names,
  50.         "author": authors,
  51.         "price": prices,
  52.         "score": scores,
  53.         "sum": sums
  54.     }
  55.     return data
复制代码
将获取的数据存入到字典中,将数据传出,使用re库对相应的数据进行处理,运用异常检错
4.保存数据
获取传出的字典类型的数据,将数据存入到pandas的DataFrame类型中
  1. from geturlcocument.get_single_docuemnt import get_single
  2. import pandas as pd
  3. # 获取字典类型的数据
  4. data=get_single.get_single()
  5. # 用pandas的DataFrame类型存储数据
  6. df=pd.DataFrame(data)
  7. df.to_csv('./books.csv',encoding='utf-8')
  8. print('ending of data')
复制代码
该项目完成!!!

来源:https://www.cnblogs.com/prettyspider/p/17478232.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

x

举报 回复 使用道具