Python 爬取 豆瓣读书 科幻小说

直接上代码:

'''

爬取豆瓣科幻小说

url = 'https://book.douban.com/tag/%E7%A7%91%E5%B9%BB'   第1页

url = 'https://book.douban.com/tag/%E7%A7%91%E5%B9%BB?start=20&type=T'   第2页

url = 'https://book.douban.com/tag/%E7%A7%91%E5%B9%BB?start=40&type=T'   第3页

规律是 0 20 40 60 80 100  ............

       1  2  3  4  5  6

       (page-1)*20

'''

import requests

import parsel

import csv

import time

#  保存数据  csv

f = open('豆瓣科幻小说.csv',mode='a',encoding='utf-8-sig',newline='')

csv_writer = csv.DictWriter(f,fieldnames=['题名','出版信息','评分','评价人数'])

csv_writer.writeheader()

for page in range(1,2):

    print(f'+++++++正在打印第{page}页++++++++++')

    time.sleep(2)                                                            #  太快了会被封ip

    url = 'https://book.douban.com/tag/%E7%A7%91%E5%B9%BB'

    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'

    }

    params = {'start':(page-1)*20,'type':'T'}

    response = requests.get(url=url,headers=headers,params=params)   # 向服务器发起请求

    selector = parsel.Selector(response.text)          # 转换数据类型 response.text-->可解析对象

    list = selector.xpath('//ul[@class="subject-list"]/li')   #  整页书籍信息列表

    for li in list:

        title = li.xpath('.//div[2]/h2/a/@title').get()      #  .//表示li下面的子节点   题名

        publishingInformation = li.xpath('.//div[2]/div[1]/text()').get().strip()   # 出版信息  

        score = li.xpath('.//div[2]/div/span[2]/text()').get()                             # 评分

        numbers = li.xpath(('.//div[2]/div/span[3]/text()')).get().strip()    # 评价人数

        print(title,publishingInformation,score,numbers)

        #  解析下来的数据  写入字典里

        dict = {

            '题名':title,

            '出版信息':publishingInformation,

            '评分':score,

            '评价人数':numbers

        }

        csv_writer.writerow(dict)

   

   

    f.close()

    print('=====全部打印完成=======')

你可能感兴趣的:(python,爬虫,开发语言)