当当网上筛选“python爬虫”系列书籍爬取9页数据

这周,我们老师让我们写个爬取电商数据的作业,题目如下
在这里插入图片描述
对此,我选择了在当当网上爬取“python爬虫”的数据,接下来我将附上我写的代码:

# -*- 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='', encoding="utf-8")
    writer = csv.writer(csv_file)
    #解析网页
    soup = bs(html, 'html.parser')
    class_tag = ['line'+str(x) for x in range(1,61)]
    for class_tag in class_tag:
        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,author,public_time,public])
    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))

控制台输出如下:
在这里插入图片描述
csv文件(截取一部分):
在这里插入图片描述
在这里插入图片描述
可见,9页数据总共有540条数据(除掉列名)

这个爬虫代码的缺点:
没有使用虚拟ip代理自己的ip,也没有使用cookie保持会话

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值