爬虫——解析图书排行榜图书信息

目的
1、掌握正则表达式的使用,会使用re模块解析网页数据。
2、掌握Xpath语法的使用,会使用lxml库解析网页数据。
3、掌握Beautifulsoup的使用,会使bs4库解析网页数据。
4、掌握JSONPath语法的使用,会使用json模块解析网页数据。
任务
爬取图书排行榜包括书名、原价、促销价、评论数、作者、出品时间以及出版社;

import requests
import re
from time import sleep
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
#从网页获取所有内容,以列表的方式返回
def getInfo(page):
    page = str(page)
    url = 'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-' +page
    response = requests.get(url=url, headers=headers).text
    ex = '(?<=<li>\s)[\w\W]*?(?=<\/li>)'
    p = re.findall(ex,response)#p的前三个元素是无用数据
    del p[0:3]#删除前三个元素
    return p
#根据传入的字符串解析第几本,返回字符串
def getIndex(str):
    ex = 'list_num.*?>(.*?)<'
    p = re.findall(ex,str)
    return p[0]
#返回书名书名
def getName(str):
    ex = 'title="(.*)"\/'
    p = re.findall(ex,str)
    return p[0]
#获取评论数量
def getCommentCount(str):
    ex = '_blank">([\d]+.*?)<'
    p = re.findall(ex,str)
    return p[0]
#获取作者
def getWriter(str):
    ex = 'title="(.*?)"'
    p = re.findall(ex,str)
    # return p[2]
    try:
        return p[2]
    except:
        return "暂未找到"
#获取出品时间
def getTime(str):
    ex = '<span>(.*?)<'
    p = p = re.findall(ex,str)
    return p[0]
#获取出版社
def getPub(str):
    ex = 'key=(.*?)"'
    p = re.findall(ex,str)
    return p[-1]
#获取价格
def getPriceFir(str):
    ex = 'price_r">.*?;(.*)<'
    p = re.findall(ex,str)
    return p[0]
#获取促销价格
def getPriceNow(str):
    ex = 'price_n">.*?;(.*)<'
    p = re.findall(ex, str)
    return p[0]

def main():
    for page in range(1,26):
        list = getInfo(page)
        for info in list:
            index = getIndex(info)
            name = getName(info)
            priceFir = getPriceFir(info)
            priceNow = getPriceNow(info)
            commentCount = getCommentCount(info)
            writer = getWriter(info)
            time = getTime(info)
            pub = getPub(info)
            print("{}书名:{}  {} 作者:{}  ".format(index,name,commentCount,writer))
            print("出版时间:{} 出版社:{} 原价:{} 促销价:{}".format(time,pub,priceFir,priceNow))
    sleep(0.5)
main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青柠Löwenzahn m.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值