python 爬虫
python爬取金庸小说人物
‘’’
通过http://www.jinyongwang.com/data/renwu/来获取金庸小说中的人物
输出结果为
小说1
人物1 人物2 人物3 …
小说2
人物1 人物2 人物3 …
…
话不多说直接上码
‘’’
import requests
from bs4 import BeautifulSoup
import re
#获取网页内容
def get_html(url):
page = requests.get(url)
#print(page.content)
return page.content
#获取小说及人物并写入txt中
def analyse_html(html):
#第一次使用BeautifulSoup,感觉perfect
soup = BeautifulSoup(html,'html.parser')
body = soup.body
#print(body)
main = body.find('div',attrs = {'class':'main'})
booklist = main.find('div',attrs = {'class':'booklist'})
#写入指定txt
file_path = r'E:\names.txt'
file = open(file_path,'a',encoding='utf-8')
#可以通过使用正则的方式,找到含有小说名的 'h2' 标签,和含有人物名的 'div' 标签
for dataname in booklist.find_all(re.compile('h2|div')):
# print(dataname)
# print(dataname['class'])
# print(type(dataname['class']))
#可以直接通过 tag['class'] 的方式直接获取 tag 值
if dataname['class'][0] == 'dataname':
dataname = dataname.find('span')
book_name = dataname.get_text()
print(book_name+'\n')
file.write('\n'+book_name+'\n')
elif dataname['class'][0] == 'datapice' :
for a in dataname('a'):
#含有人物图片的和不含有的获取方式有少许差异
# <a href="/data/2752.html"><img alt="郑旦" src="/public/uploads/baike/2015-08-15/95771439622810_120.jpg"/>郑旦</a> 这种含有人物图片的直接通过 get_text() 即可获取
if a.find('i') == None:
role_name = a.get_text().replace(' ', '')
#print(role_name)
else:
# <a href="/data/2767.html"><i class="icon"></i>卓天雄</a>
#这种不含有人物图片的直接通过 get_text() 获取,会多获取到一个 ‘’,暂无其他好办法去掉,只能通过字符串切割的方式去掉
role_name = a.get_text(strip=True).replace(' ','')[1:]
file.write(role_name+' ')
file.close()
if __name__ == '__main__':
url = 'http://www.jinyongwang.com/data/renwu/'
html = get_html(url)
analyse_html(html)
第一次在CSDN上写些东东,感觉还不错~~