金融数据分析(三)当当网店铺商品爬虫——爬虫类书籍为例:requests&bs4

案例(二)爬虫预热

项目一:当当网店商品爬虫——爬虫类书籍为例

此案例是运用bs4库find方法对相关内容进行抓取。

 -*- coding: utf-8 -*-
import requests
import csv
from bs4 import BeautifulSoup as bs
#获取网页信息
def request_dandan(url):
    try:
        #用户代理
        headers = {
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
        r = requests.get(url,headers=headers)
        if r.status_code == 200:
            return r.text
    except requests.RequestException:
        return None

#存放列名
def write_item_to_file():
    csv_file = open('dangdang.csv', 'w', newline='', encoding="utf-8")
    writer = csv.writer(csv_file)
    writer.writerow(['书名','购买链接','纸质书价格','电子书价格','电子书链接','书的详细介绍','书的封面地址','评论地址','作者','出版时间','出版社'])
    print('列名已成功放入CSV中')
#解析网页并写入csv文件中
def parse_dangdang_write(html):
    csv_file = open('dangdang.csv', 'a', newline='')
    writer = csv.writer(csv_file)
    #解析网页
    soup = bs(html, 'html.parser')
    class_tags = ['line'+str(x) for x in range(1,61)]
    for class_tag in class_tags:
        li = soup.find('li',class_=class_tag)
        book_name = li.find('a',class_='pic').get('title') # 书名
        paperbook_price = li.find('span',class_='search_now_price').text  #纸质书价格
        try:
            ebook_price = li.find('a',class_='search_e_price').find('i').text  #电子书价格
            ebook_link = li.find('a',class_='search_e_price').get('href') #电子书链接
        except:
            ebook_price = ''
            ebook_link = ''
        detail = li.find('p',class_='detail').text #书的详细介绍
        book_purchase_link = li.find('a',class_='pic').get('href') #每本书的详细购买链接
        book_cover_link = li.find('a',class_='pic').find('img').get('src')#书的封面地址
        comment_link = li.find('a',class_='search_comment_num').get('href') #评论地址
        author = li.find('p',class_='search_book_author').find('span').text # 书的作者
        public_time = li.find('p',class_='search_book_author').find('span').next_sibling.text[2:]#出版时间
        public = li.find('p',class_='search_book_author').find('span').next_sibling.next_sibling.text[3:]#出版社
        writer.writerow([book_name, book_purchase_link, paperbook_price, ebook_price, ebook_link, detail, book_cover_link, comment_link, author, public_time, public])
        #writer.writerow(['书名', '购买链接', '纸质书价格', '电子书价格', '电子书链接', '书的详细介绍', '书的封面地址', '评论地址', '作者', '出版时间', '出版社'])
    csv_file.close()

if __name__ == '__main__':
    write_item_to_file()
    for page in range(1, 10):  # 爬取9页数据存入csv文件
        url = 'http://search.dangdang.com/?key=python%C5%C0%B3%E6&act=input&page_index=' + str(page)
        html = request_dandan(url)  # 获取网页信息
        parse_dangdang_write(html)  # 解析网页并写入csv文件中
        print('第{}页数据成功放入CSV中'.format(page))

运行结果:
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43082153/article/details/108598633