页面分析
-
首先定位到个人信息那一块,在这里可以通过find(id)来定位到这一个标签
-
往下查看,我们分别需要这两块信息,两个div标签,初步判断需要取到这两个标签
-
打开其中一块div标签我们发现,下面的dl标签中title对应数量,dt标签对应文字,其余dl标签同理。
-
打开另一个div标签我们发现有如下结构
至此我们发现,定位到最外面那一个id=asideProfile的tag,然后find所有dl tag就行了,检查发现其余div tag没有dl tag,所以这个方法可行
代码
暂时写一个简单的代码吧
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 21 22:23:19 2019
@author: hmy
"""
from urllib import request
import requests
from lxml import etree
from bs4 import BeautifulSoup
#获得html
def getHTML(url):
try:
r = requests.get(url, timeout=10)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r
except:
return "异常"
def readText(html_doc):
#解析一下
soup = BeautifulSoup(html_doc, 'lxml')
#找到信息框这个大标签,find返回第一个搜索到的tag
msg = soup.find(id='asideProfile')
# 找到所有名为dl的标签,find_all返回一个list,里面是tag
msg_dl = msg.find_all(name='dl')
# print(len(msg_dd))
# 遍历dl标签,拿出里面的dt,dd,也就是我们要解析的内容
for dl in msg_dl:
dt = dl.find(name='dt')
dd = dl.find(name='dd')
# a标签
a = dd.find(name='a')
# 原创,粉丝,喜欢,评论
print(dt.string)
# 等级标签
if (a):
#判断一下是否为空,dict key不存在的话会报错
if ('title' in a.attrs):
print(a.attrs['title'][0:2])
if ('title' in dl.attrs):
#原创,粉丝,喜欢,评论对应的值
print(dl.attrs['title'])
# 访问量,积分的值
if (dd.attrs):
print(dd.attrs['title'])
if __name__=='__main__':
url='https://blog.csdn.net/hhmy77'
html_doc=getHTML(url).text
print(type(getHTML(url)))
readText(html_doc)