一、小说数据的获取
获取的数据为起点中文网的小说推荐周榜的所有小说信息。
源代码对所有想要获取的数据都有注释。
http://dxb.myzx.cn/grandmal/
# -*- coding: utf-8 -*-"""
Created on Mon Jan 4 22:59:11 2021
"""import requestsfrom bs4 import BeautifulSoupimport os.pathimport csvimport timeimport pymysqlimport randomclass DrawBookMessage():
def __init__(self):
"""
定义构造函数,初始化最初网址,方便后面调用,不必重复写
"""
self.baseUrl='https://www.qidian.com/rank/recom';
#定义baseurl目标网址
def User_Agent(self):
"""
定义5个代理IP隐藏身份,用5个IP随机选取,以防止被检测到链接对象而终止访问
"""
user_agent1 = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'
user_agent2 = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'
user_agent3 ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
#user_agent4 ='Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0'
#这个代理在我的开发环境中会发生访问错误,作者注释在这里,便于提醒自己
user_agent5 ='Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3'
lst = [user_agent1,user_agent2,user_agent3,user_agent5]
return random.choice(lst)#返回随机IP
def getHtml(self,url):
"""
通过随机IP访问网页获取网页的内容
"""
user_agent = self.User_Agent()#获取随机IP
headers = {"User-Agent":user_agent}
request = requests.get(url,headers=headers).text#通过IP访问网页,并且获取网页内容请求
return request #返回
def commonsdk(self,url):
"""
把文本类型转换为类型,
之后还会用BeautifulSoup库来提取数据,如果这不是一个BeautifulSoup对象,
我们是没法调用相关的属性和方法的,所以,这是非常重要。
"""
html = self.getHtml(url)
doc=BeautifulSoup(html,'lxml')#转换为BeautifulSoup对象
return doc
def get_page_size(self,url):
'''获取页面总数'''
doc = self.commonsdk(url)
self.pageNum = doc.find("