python 网络爬虫及可视化之实现(二)引入库、Cookies使用、获取图书列表

项目任务:爬取当当网畅销程序设计类图书信息,爬取页面数可根据需要设置
首页地址如下:https://category.dangdang.com/cp01.54.02.00.00.00.html
1.完成提取以下畅销程序设计类图书信息:
‘书名’, ‘简介’, ‘作者’, ‘出版社’, ‘出版时间’, ‘评论排名’, ‘评论数’,‘价格’, ‘图书分类’,‘分类’,‘链接’
2.将结果输出到畅销程序设计类图书.xlsx

1 引入相关库

import random

from fake_useragent import UserAgent
import requests

import time
from bs4 import BeautifulSoup
from pandas import DataFrame
import pandas as pd

import matplotlib.pyplot as plt
import matplotlib as mpl

import wordcloud
import jieba
from collections import Counter
import imageio
爬虫之解决需要登录的网站
使用Cookies

使用Cookie方便是方便,但Cookie是服务端给你的,它是有过期时间的,如果过期了,那你的身份信息也就无效了,需要重新登入获取了。

第一步,在网站中复制一个已登录用户的Cookie;
打开页面,点击工具栏中更多工具>开发者工具(win:ctl+shift+I mac:⌘+Option+I),选中网络(Network),在name中找到当前网址,查看右侧Headers中的Cookie,把Cookie复制下来备用。
在这里插入图片描述
第二步,将已登录用户的Cookie放到headers中进行请求;

# 定义动态headers 防止被锁ip
ua = UserAgent() 
# 生成一个随机的PC端User-Agent(当当网会根据终端类型自动生成相应的客户端代码,桌面的和移动端是不同的,因此为保证获取的数据正确要生成特定端的代码)
pc_user_agents = [ua.chrome, ua.firefox, ua.safari, ua.edge]
random_pc_user_agent = random.choice(pc_user_agents)
headers = {
    'User-Agent': random_pc_user_agent, #也可以使用 ua.random
    'Cookie':'使用自己的帐号获取cookie...',#此处复制copy下来的Cookie
}

2 获取要爬的页面URL

以下是获取畅销程序设计类图书信息链接信息
https://category.dangdang.com/cp01.54.02.00.00.00.html
在这里插入图片描述
通过开发者工具中的跟踪工具查看导航元素,我们可以获取详情页的链接地址url.
同理我们可以查看第二页的导航,第三页的导航,分析出相关的页面导航规则,以便爬取时动态生成爬取主页的url.如畅销程序设计类图书信息各页的导航地址信息列表如下,则我们可以构造如https://category.dangdang.com/pg{}-cp01.54.02.00.00.00.html的结构。

https://category.dangdang.com/cp01.54.02.00.00.00.html
https://category.dangdang.com/pg2-cp01.54.02.00.00.00.html
https://category.dangdang.com/pg2-cp01.54.02.00.00.00.html

# 定义开始抓取的序列号,从2开始9页【这个分析查看网页代码即可发现】假如加上首页共10页
start_num = [i for i in range(1, 10, 1)]
# 1组装要爬取的页面url
for start in start_num:
    if start == 1:
        url = 'https://category.dangdang.com/cp01.54.06.00.00.00.html'
    else:
        url = 'https://category.dangdang.com/pg{}-cp01.54.06.00.00.00.html'.format(start)

3 数据获取模块

用于从网店获取最基本的html文本信息

#数据获取模块
class DataFetcher:
    @staticmethod
    def fetch_data(url,headers):
        response = requests.get(url=url, headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            raise Exception(f"Failed to fetch data: {response.status_code}")

数据解析模块请关注下一节的内容。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值