爬取鲸鱼阅读这个网站的小说,将小说的名字、作者、类别这三个字段爬取下来存入到MySQL中
1. 首先分析网页的结构
我们选取第一页的内容来进行解析 url = http://www.jingyu.com/search/stack?pn=1
根据我们审查元素的结果来看,所有的数据都放在ul这个标签中,每一本小说的信息都在该ul下面的li标签中,我们再进一步打开li标签
和我预想的一样,我们只需要获取该页面的这个ul标签,然后再对ul标签中的每个li解析更进一步的解析即可
2. 设计数据库
我预先想要爬取的字段只有三个,外加一个id,所以只需设置四个字段即可
下图就是我写的数据库,代码中的表名为xs,因为后面改了一下,这里知道一下就行,表放在test数据库中
3. 代码(这里我放出所有的代码,这个网站并没有反爬虫措施,所以我也没有写反反爬虫)
import requests
from bs4 import BeautifulSoup
import pymysql
import re
# 解析链接
def parse(url):
html = requests.get(url)
html = html.text
soup = BeautifulSoup(html,'lxml')
# 找到li标签,该标签内有两个class属性,分别为book,clearfix
data = soup.find_all('li',{'class':{'book','clearfix'}})
# 解析该data
for i in data:
name = i.h3.a.text
zz_fl = i.p.text
# 将得到的数据按|来拆分,拆分后为一个列表,其中有两个元素,但元素中有空格
# 所以要使用strip来去除空格
zz_fl = zz_fl.split('|')
zuoze = zz_fl[0].strip()
fenlei = zz_fl[1].strip()
print('书名:{0} 作者:{1} 类别:{2}'.format(name,zuoze,fenlei))
# 将得到的数据传送给MySQL
mysql(name,zuoze,fenlei)
# 解析完后再进行下一步解析
next_page(url)
# 查找下一页url
def next_page(nextpage):
# 将得到的下一页的url由自己指定
# 匹配http://www.jingyu.com/search/stack?pn=1后面的数字
a = re.search('pn=(.*)',nextpage).group(1)
# 匹配http://www.jingyu.com/search/stack?pn=1数字前面的值
# 这里我不用字符串的split('='),主要为了练习正则
start_url=re.findall('.*pn=',nextpage)[0]
a = int(a)
# 总共25页,只需要爬取25页就可以
if a<=25:
a+=1
nextpage = start_url + str(a)
if a<=25:
# 只要url还未到25页,那么就继续解析
parse(nextpage)
else:
print('结束翻页')
# 定义一个类,将连接MySQL的操作写入其中
class down_mysql:
def __init__(self,name,zuoze,fenlei):
self.name = name
self.zuoze = zuoze
self.fenlei = fenlei
self.connect = pymysql.connect(
host = 'localhost',
db = 'test',
port = 3306,
user = 'root',
passwd = '123456',
charset = 'utf8',
use_unicode = False
)
self.cursor = self.connect.cursor()
# 保存数据到MySQL中
def save_mysql(self):
sql = "insert into xs(`name`,zuoze,fenlei) VALUES (%s,%s,%s)"
try:
self.cursor.execute(sql,(self.name,self.zuoze,self.fenlei))
self.connect.commit()
print('数据插入成功')
except:
print('数据插入错误')
# 新建对象,然后将数据传入类中
def mysql(name,zuoze,fenlei):
down = down_mysql(name,zuoze,fenlei)
down.save_mysql()
if __name__ == '__main__':
# 给定一个初始的url
url='http://www.jingyu.com/search/stack?pn=1'
# 解析该url
parse(url)
4. 运行代码
然后我们就会看到以下这些信息,等待一段时间等爬虫将数据爬取完成
等了我将近五六分钟的才把这些数据爬完
然后我们来看下数据库是否数据全部插入
看到了575条数据,看来数据是插入成功了,一页有21本小说,一共25页,算下来有525条数据,这里多了50条,我也不知道哪里多出来的,然后我就查了一下
就万古大帝多出了一本,其它的也没看见多出来什么,脑壳疼,就不想了,哪位有时间帮我想想
接下来我就筛选了一下,发现都市的小说最多,我猜应该现在的人大部分都喜欢看都市类的吧,想当年我们那时候都是看修真类的居多,可能他们都长大了吧。