190824-英雄联盟传记爬取

今天的公开课讲的是英雄联盟传记的爬取。
–爬取了英雄联盟的所有人物的"name,slug,release,associated",分别是名字,英文名字,创建日期以及国籍
–保存到lol.csv文件中
–再读取这个文件,利用里面的slug参数和获取英雄传记的地址结合
–for循环遍历所有英雄的传记故事,利用etree去掉<p>标签,利用join()函数来连接字符串数组,最后将再写入到lol.txt文件中,形成一本传记集。

1.最简单的爬取,用 requests发送post请求并获取json数据,(网站有反爬取的话就不行)

import requests		#爬取数据的库
url = 'https://yz.lol.qq.com/v1/zh_cn/search/index.json'	#这个是网址
response = requests.get(url)	#爬取数据(或者叫下载数据)
data = response.json()	#获取json数据

2.打开文件使用相对路径,并且声明是utf-8编码的方式(不然有可能出错)

with open('../file/lol.csv','w',encoding='utf-8') as file:	#两个点..代表上一层目录,如果想用当前目录就用一个点.
	................................

3.拼接字符串f‘’,也叫做格式化操作或者插值运算符,与可以可以参考其他的方法

file.write(f'\n{name},{slug},{release},{associated}')	#将多个变量值以特定格式来输出,也叫做格式化

4.csv数据的读取以及提取某一列数据
#先打开csv文件,在使用 csv.DictReader()来将一个csv数据加载为一个字典(有表头的文件建议加载为字典)
#将字典里面的slug一列提取出来

with open('../file/lol.csv',encoding='utf-8') as file_csv:
    reader = csv.DictReader(file_csv)
    slug = [r['slug'] for r in reader]		#列表推导式,相当于下面的三行注释
    #slug = []
    #for r in reader:
    #	slug.append(r['slug'])

5.将字典中所有的”值“提取出来

contenthtml = ""
for c in biography.values():
    contenthtml +=c

6.利用etree.HTML()加载字符串内容,构造了一个XPath解析对象,并且拿<p>标签下面所有的数据(从而去掉<p>标签)

#etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。
html = etree.HTML(contenthtml)  #解析HTML文档
content = html.xpath("//p/text()")  #去掉<p>标签

7.利用join()连接字符串

# 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串;
f.write('\n'.join(content)+"\n\n")  	# 以换行符\n来组合列表,使多个列表变成一个完整的

下面是完整代码:

#对herosoider.py和bataspider.py结合在一起
import requests #爬取数据的库
import csv  #csv操作库
from lxml import etree  #可以将一些文本转换为html,方便进行增删操作。

url = 'https://yz.lol.qq.com/v1/zh_cn/search/index.json'
response = requests.get(url)
data = response.json()

with open('../file/lol.csv','w',encoding='utf-8') as file:
    file.write("name,slug,release,associated")  #写入一个表头
    for d in data['champions']:
        name = d['name']
        print(name)
        slug = d["slug"]
        release = d['release-date']
        associated = d['associated-faction-slug']
        file.write(f'\n{name},{slug},{release},{associated}')

with open('../file/lol.csv',encoding='utf-8') as file_csv:
    reader = csv.DictReader(file_csv)
    slug = [r['slug'] for r in reader]
    #slug = []
    #for r in reader:
    #	slug.append(r['slug'])

with open('../file/lol.txt','w',encoding='utf-8') as f:
    for i,s in enumerate(slug):
        url = f"https://yz.lol.qq.com/v1/zh_cn/champions/{s}/index.json"
        response = requests.get(url)
        data = response.json()
        name = data['champion']['name']
        title = data['champion']['title']
        biography = data['champion']['biography']
        contenthtml = ""
        for c in biography.values():
            contenthtml +=c
        #etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。
        html = etree.HTML(contenthtml)  #解析HTML文档
        content = html.xpath("//p/text()")  #去掉<p>标签
        f.write(f'第{i+1}节 {name}-{title}\n')
        f.write('\n'.join(content)+"\n\n")  # 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串;
                                            # 以换行符来组合列表,使多个列表变成一个完整的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值