您当前的位置: 首页 >  Python

魔王不会哭

暂无认证

  • 4浏览

    0关注

    149博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python采集某平台书籍和评论数据~

魔王不会哭 发布时间:2022-05-27 18:57:02 ,浏览量:4

前言

嗨喽,大家好呀!这里是魔王呐~

环境使用:
  • Python 3.8
  • Pycharm
模块使用:
  • requests >>> pip install requests
  • parsel >>> pip install parsel
  • csv
如果安装python第三方模块:
  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令

基本实现流程:

采集视频 采集图片 采集小说

一. 数据来源分析

确定了自己想要采集数据是什么?

通过开发者工具抓包分析

通过F12开发者工具里面的搜索关键字, 找到相应的数据

二. 代码实现步骤过程

爬虫模拟浏览器对于url地址发送请求, 获取服务器返回响应数据

  1. 发送请求 发送get请求
  2. 获取数据, 获取服务器返回响应数据 response
  3. 解析数据, 提取我们想要数据内容 xpath css re 这些方法去提取
  4. 保存数据, 保存表格里面
代码 采集书籍数据
import requests  # 数据请求模块 
import parsel  # 数据解析模块 
import csv  # csv数据表格

# mode='a' mode是什么意思 保存方式 a 是什么意思 追加保存
f = open('data_1.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '评论',
    '推荐',
    '作者',
    '日期',
    '出版社',
    '售价',
    '原价',
    '折扣',
    '电子书',
    '详情页',
])
csv_writer.writeheader()  # 写表头
"""
发送请求
    爬虫模拟浏览器对于url地址发送请求, 获取服务器返回响应数据

    变量规则:
        不能使用数字开头
        不推荐使用关键字作为变量名 
"""
# 确定网址
for page in range(1, 26):  # 包含头, 不包含尾巴
    print(f'=======================正在采集{page}页数据内容=======================')
    url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-{page}'
    #  headers 请求头 用来伪装模拟python代码 字典的数据类型
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
    }
    # 调用requests这个模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求伪装, 最后用自定义response变量接受返回数据
    response = requests.get(url=url, headers=headers)
    # print(response)  # 打印发送请求得到的内容   响应对象 200状态码表示请求成功
    # print(response.text)  # 获取响应对象的文本数据
    """
    解析数据, 提取我们想要数据内容
        css选择器: 根据标签属性内容提取数据 完全掌握你在系统课程学2.5个小时

    解析方法: css xpath re  那种好用用那种 如果你xpath没解析出来,换一下
    """
    selector = parsel.Selector(response.text)  # 把获取下来html字符串数据转成selector对象 
    lis = selector.css('ul.bang_list li')  # 调用css方法解析数据 第一次提取 获取所有li标签内容
    # print(lis)
    for li in lis:
        title = li.css('.name a::attr(title)').get()  # 获取书名
        # 同理可得 p:nth-child(1) 组合选择表示取第几个P标签
        comment = li.css('.star a::text').get().replace('条评论', '')  # 评论
        recommend = li.css('.tuijian::text').get().replace('推荐', '')  # 推荐
        author = li.css('.publisher_info a::attr(title)').get()  # 作者
        date = li.css('.publisher_info span::text').get()  # 日期
        press = li.css('div:nth-child(6) a::text').get()  # 出版社
        price = li.css('.price p:nth-child(1) .price_n::text').get()  # 售价
        price_r = li.css('.price p:nth-child(1) .price_r::text').get()  # 原价
        price_s = li.css('.price p:nth-child(1) .price_s::text').get().replace('折', '')  # 折扣
        price_e = li.css('.price_e .price_n::text').get()  # 电子书
        href = li.css('.name a::attr(href)').get()  # 详情页
        dit = {
        教程、资料、解答可加Q:261823976
            '标题': title,
            '评论': comment,
            '推荐': recommend,
            '作者': author,
            '日期': date,
            '出版社': press,
            '售价': price,
            '原价': price_r,
            '折扣': price_s,
            '电子书': price_e,
            '详情页': href,
        }
        csv_writer.writerow(dit)
        print(title, comment, recommend, author, date, press, price, price_r, price_s, price_e, href)
如何采集评论:

目的就为了让你们巩固一下前面案例内容

1、 爬虫基本流程是什么? 分为两个大步骤…

一. 数据来源分析
  1. 确定采集数据
  2. 通过开发者工具搜索关键字查询数据包
二. 代码实现的过程 基本是哪四个?
  1. 发送请求
  2. 获取数据
  3. 解析数据
  4. 保存数据
方法一
import requests
import pprint
import re
import time

for page in range(1, 11):
    time.sleep(1.5)
    url = 'http://product.dangdang.com/index.php'
    data = {
        'r': 'comment/list',
        'productId': '28992419',
        'categoryPath': '01.31.04.00.00.00',
        'mainProductId': '28992419',
        'mediumId': '0',
        'pageIndex': page,
        'sortType': '1',
        'filterType': '1',
        'isSystem': '1',
        'tagId': '0',
        'tagFilterCount': '0',
        'template': 'publish',
        'long_or_short': 'short',
    }
    headers = {
    教程、资料、解答可加Q:261823976
        'Cookie': '__permanent_id=20220526142043051185927786403737954; ddscreen=2; secret_key=1e8f0aa9dd4b8424f700334a1d325eb5; pos_9_end=1653548069741; ad_ids=5066933%2C2723462%2C2531198%7C%232%2C2%2C2; dest_area=country_id%3D9000%26province_id%3D111%26city_id%20%3D0%26district_id%3D0%26town_id%3D0; __visit_id=20220526214023174294725354816250512; __out_refer=; pos_6_end=1653573342590; pos_6_start=1653573352622; __trace_id=20220526215604629207453265505873398; __rpm=p_28992419.comment_body..1653573324701%7Cp_28992419.comment_body..1653573462744',
        'Host': 'product.dangdang.com',
        'Referer': 'http://product.dangdang.com/28992419.html',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36',
    }
    response = requests.get(url=url, params=data, headers=headers)
    html_data = response.json()['data']['list']['html']   # 字典键值对取值 
    # print(html_data)  遇事不决 .*?
    content_list = re.findall("target='_blank'>(.*?)", html_data)
    for content in content_list:
        print(content)
        with open('评论.txt', mode='a', encoding='utf-8') as f:
            f.write(content)
            f.write('\n')
方法二
import jieba
import wordcloud
import imageio
py = imageio.imread('1.png')
f = open('评论.txt', encoding='utf-8')
txt = f.read()
print(txt)

txt_list = jieba.lcut(txt)  # 分词处理
print(txt_list)

string = ' '.join(txt_list)

wc = wordcloud.WordCloud(
    width=1000,
    height=800,
    background_color='yellow',
    scale=15,
    font_path='msyh.ttc',
    mask = py
)
wc.generate(string)

wc.to_file('ouput_3.png')
尾语

成功没有快车道,幸福没有高速路。

所有的成功,都来自不倦地努力和奔跑,所有的幸福都来自平凡的奋斗和坚持

——励志语录

本文章就写完啦~感兴趣的小伙伴可以复制代码去试试

你们的支持是我最大的动力!!记得三连哦~ 💕 欢迎大家阅读往期的文章呀

关注
打赏
1665385393
查看更多评论
立即登录/注册

微信扫码登录

0.0758s