爬取豆瓣图书250的数据脚本

爬取豆瓣图书250的数据脚本,第1张

爬取豆瓣图书250的数据脚本
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 12 17:22:00 2021

@author: davis
"""


#试一下输入豆瓣网址然后就能自动分析网页上的书名/电影名和评分进行统计

import urllib.request
import re

def openurl(url):
	proxy_support=urllib.request.ProxyHandler({'http':'182.84.144.73'})#找一个代理ip
	opener = urllib.request.build_opener(proxy_support)#定义一个opener
	opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0')]#opener的一个headers
	urllib.request.install_opener(opener)
	head={}
	head['Connection']='close'
	req=urllib.request.Request(url) #先request得到对象
	response=urllib.request.urlopen(req) #然后得到response对象
	html=response.read().decode('utf-8')#然后进行解码得到我们要的格式
	return html

def get_book(html):
    p=r'(title="[^"]+")'#正则表达式,规定了我需要爬取的链接的格式,正则表达式,加括号没影响,多个括号代表多个条件
    bookname=re.findall(p,html)
    #想在正则表达式中排除“可试读”的,太麻烦,直接爬下来之后删掉“可试读”的
    while 'title="可试读"' in bookname:
        bookname.remove('title="可试读"')
    q=r'rating_nums">[0-9].[0-9]<'
    bookscore=re.findall(q,html)
    for i in range(0,25):
        text1=str(bookname[i])
        text11=text1.lstrip('title="')
        text12=text11.rstrip('"')
        text2=str(bookscore[i])
        text21=text2.lstrip('rating_nums">')
        text22=text21.rstrip('<')
        with open('C://Users/刘子豪/Desktop/doubanbook.txt','a',encoding='utf-8') as f:#在python当中需要用到的路径符号是反斜杠
            text = 'n'+text12+'    '+text22
            f.write(text)

def get_page(html):
	page=r'start=[0-9]{2,3}' #Newer Comments" href="https://book.douban.com/top250?start=25
	page_list=re.findall(page,html)
	page_url='https://book.douban.com/top250?'+page_list[-1]#他这个本来都是取第一个,不对不对,豆瓣应该有额外的规则
	return page_url

if __name__ == '__main__':
    url = 'https://book.douban.com/top250?start=0'
    i=0
    while i != 10:
        html=openurl(url)
        get_book(html)
        url=get_page(html)
        i=i+1

主要还是练手,不过豆瓣中途把我给封了,还好换了浏览器agent就好了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5659708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存