首先我们找到一个LOL英雄的全部展示的页面:http://lol.kuai8.com/hero/ 恕瑞玛,your king has return ! hah
hah金克丝长得不错,点击一下http://lol.kuai8.com/hero/3.html
摁一下键盘F12出现页面源码:
点击一下左上角的框住的这个按钮,然后在左边显示页面选择目标右边就会自动定位相应的源码
比如我们在左边点击金克丝的名字,右边就自动定位到了相应的源码
经查看该网页请求方式为get
然后我们首先获取该页面的html源码:
import requests
from pyquery import PyQuery as pq
#请求网站数据request的get()方法可以实现get请求,
#当然也可以用request的post()、put()、dellete()方法实现post、put、delete等请求
html = requests.get('http://lol.kuai8.com/hero/138.html').content.decode('utf-8')
#现在获取了html页面的源码
print (html)
查看状态码:
import requests
#请求网站数据request的get()方法可以实现get请求,
#当然也可以用request的post()、put()、dellete()方法实现post、put、delete等请求
html = requests.get('http://lol.kuai8.com/hero/3.html')
#现在获取了html页面的源码
print (html.status_code)
运行结果(200代表请求成功):
获取别名测试:
import re
#编写正则表达式匹配名字和别名
h1 = '<h1 id="DATAname">暴走萝莉</h1>'
re_name = re.compile('<h1.*DATAname.*>(.*)</h1>')
#用match方法获取DATAname
DATAname = re.match(re_name,h1)
#group()输出完整结果,group(1)输出正则表达式中第一个被()包裹的匹配结果
print(DATAname.group(1))
运行结果:
测试XPath
import requests
import re
from lxml import etree
#请求网站数据request的get()方法可以实现get请求,
#当然也可以用request的post()、put()、dellete()方法实现post、put、delete等请求
html = requests.get('http://lol.kuai8.com/hero/3.html').content.decode('utf-8')
#现在获取了html页面的源码
#调用HTML类进行初始化,构造一个XPath解析对象(etree模块可以自动修正HTML文本)
html_xpath = etree.HTML(html)
result = etree.tostring(html_xpath)
#调用toString()方法输出html代码,但结果是bytes类型,利用decode()方法将其转成str类型
print(result.decode('utf-8'))
这样还是有个中文乱码的问题
所以换种方法(注意:etree.HTMLParse()括号里不加编码集的话中文乱码问题有时也可以解决):
import requests
import re
from lxml import etree
#请求网站数据request的get()方法可以实现get请求,
#当然也可以用request的post()、put()、dellete()方法实现post、put、delete等请求
html = requests.get('http://lol.kuai8.com/hero/3.html').content.decode('utf-8')
#现在获取了html页面的源码
#用etree.parse
html_xpath = etree.parse(html,etree.HTMLParser(encoding='gbk'))
result = etree.tostring(html_xpath)
#调用toString()方法输出html代码,但结果是bytes类型,利用decode()方法将其转成str类型
print(result.decode('utf-8'))
网页结构太复杂了,Xpath好像适合结构简单清晰的网页结构,遂放弃...接下来试试Beautiful Soup