python爬虫——requests库爬取当当网图书信息

requests库 配合 正则表达式 爬取当当网五星榜图书信息

import requests
import re
import time
import json


def main(page):
    url = 'http://bang.dangdang.com/books/fivestars/1-' + str(page)  # 获取不同页数的url
    html = request_dandan(url)  # 针对该页面发送请求,获取内容
    items = parse_result(html)  # 针对内容 解析过滤我们想要的信息(是一个生成器)
    # 将解析好的每页内容(生成器)写入文件
    for item in items:
        write_item_to_file(item)


# 请求当当网的方法
def request_dandan(url):
    try:
        response = requests.get(url)  # 发送get请求
        if response.status_code == 200:  # 如果正常响应
            return response.text  # 返回内容
    except requests.RequestException:  # 出错则返回none
        return None


# 解析当当网的方法
def parse_result(html):
    # 正则表达式将需要过滤的信息格式打包
    pattern = re.compile(
        '<li>.*?<div.*?list_num.*?(\d+).</div>.*?<img src="(.*?)".*?title="(.*?)"/></a></div>.*?class="star">.*?class="tuijian">(.*?)</span>.*?class="publisher_info">.*?target="_blank">(.*?)</a>.*?class="biaosheng">.*?<span>(.*?)</span>.*?class="price_n">&yen;(.*?)</span>.*?</li>',
        re.S)
    # 找到所有符合的信息(返回一个list)
    items = re.findall(pattern, html)
    # 创建生成器生成一个dict,以便写入文件
    for item in items:
        yield {
            'range': item[0],
            'image': item[1],
            'title': item[2],
            'recommend': item[3],
            'author': item[4],
            'times': item[5],
            'price': item[6]
        }


# 将解析好的信息写入文件的方法
def write_item_to_file(item):
    print("开始写入数据 ====> " + str(item))
    with open('dangdang_book.txt', 'a', encoding='utf-8') as f:
        f.write(json.dumps(item, ensure_ascii=False) + '\n')  # 写入每本书的数据并换行
        f.close()


if __name__ == '__main__':
    i = 1
    while i < 26:  # 该榜单一共有25页,一页一页获取并写入文件
        main(i)
        i += 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值