Python爬取晋江文学城积分总榜的小说标题、作者及标签

因为数据库作业需要爬取晋江的数据,本着不写白不写的原则分享一下爬取过程

1.import需要用到的库

import requests
import pandas as pd
from lxml import etree
import openpyxl

这里的requests用于获取网页的内容,返回值为html格式,etree用于对requests获得的数据进行处理,pandas库在后面格式化保存数据要用到

2.使用requests.get()获取网页数据

这里我爬取的是积分总榜,网页为https://www.jjwxc.net/topten.php?orderstr=7&t=2

url='https://www.jjwxc.net/topten.php?orderstr=7&t=2'
r=requests.get(url)
print(r.status_code)
#r.status_code=200说明服务器成功返回网页
#由于默认html编码格式为‘utf-8’,而晋江的编码为‘gb18030’,故要对爬取的数据进行解码
rt=r.content.decode('gb18030')
et=etree.HTML(rt)#这里使用etree

3.在爬取的数据中选择我们所需要的内容

 

 简单浏览一下数据,可以看见小说标题和作者都在元素<a>里面,而元素<a>在元素table[3]里面,故获取小说名和作者的xpath路径为:book=et.xpath('//table[3]//a/text()')

book=et.xpath('//table[3]//a/text()')

print一下book查看结果,得到的结果为:

(太多了没截完)

 然后分别用相应的list存放数据:

book_title=[]
book_author=[]
book_type=[]
for i in range(0,len(book),2):
    book_author.append(book[i])
    book_title.append(book[i+1])

接下来爬取每个小说的标签

我们注意到每个小说的标签在当前页面是没有的,每个小说的标签只能在小说的具体页面看到,如图:

 

所以要爬取标签,首先要爬取榜单中每本小说的页面链接。从爬取的数据中我们可以看到,小说标签的xpath路径为: link=et.xpath('//table[3]//a[@class="tooltip"]/@href')

link中的数据为:

故用循环依次通过link列表中的链接爬取小说标签

head='https://www.jjwxc.net/'#别忘了加上开头,link中爬取的页面链接缺少这个头
for s in link:
    
    s=head+s
    r=requests.get(s)
    #print(r.status_code)
    rt=r.content.decode('gb18030',errors='ignore')
    #print(rt)
    et=etree.HTML(rt)
    sr=[]
    sr=et.xpath('//a[@style="text-decoration:none;color: red;"]/text()')
    #print(sr)
    book_type.append(sr)

则book_type中的内容为:

4.将三个表合成一个,以excel格式输出

data=list(zip(book_title,book_author,book_type))
columns=['书名','作者','类型']
df=pd.DataFrame(data,columns=columns)
df.to_excel('晋江小说总积分排行.xlsx', index=False)
print("finish!")

 5.总体代码

import requests
import pandas as pd
from lxml import etree
import openpyxl

url='https://www.jjwxc.net/topten.php?orderstr=7&t=2'
r=requests.get(url)
print(r.status_code)
#r.status_code=200说明服务器成功返回网页
#由于默认html编码格式为‘utf-8’,而晋江的编码为‘gb18030’,故要对爬取的数据进行解码
rt=r.content.decode('gb18030')
et=etree.HTML(rt)#这里使用etree
book=et.xpath('//table[3]//a/text()')
book_title=[]
book_author=[]
book_type=[]
for i in range(0,len(book),2):
    book_author.append(book[i])
    book_title.append(book[i+1])
head='https://www.jjwxc.net/'#别忘了加上开头,link中爬取的页面链接缺少这个头
for s in link:
    
    s=head+s
    r=requests.get(s)
    #print(r.status_code)
    rt=r.content.decode('gb18030',errors='ignore')
    #print(rt)
    et=etree.HTML(rt)
    sr=[]
    sr=et.xpath('//a[@style="text-decoration:none;color: red;"]/text()')
    #print(sr)
    book_type.append(sr)
data=list(zip(book_title,book_author,book_type))
columns=['书名','作者','类型']
df=pd.DataFrame(data,columns=columns)
df.to_excel('晋江小说总积分排行.xlsx', index=False)
print("finish!")

6.结果

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值