使用Python提取本地HTML文件中的内容
获取HTML文件中的内容 读取这个HTML文件,然后获得这个文件所有内容,在进行提取
读取文件open()
with open('ht1.html', 'r', encoding='UTF-8') as f:
html_data = f.read()
print(html_data)
XML 可扩展标记语言
Xpath XML path language 用于提取 文档中的元素
使用Lxml库来实现xpath语法提取
安装 Lxml
pip install Lxml
- 从html_data中提取 欢迎来到王者这个标题
from lxml import html
selector = html.fromstring(html_data)
h1 = selector.xpath('/html/body/h1/text()')
print(h1)
- 获取p内容
selector = html.fromstring(html_data)
p = selector.xpath('/html/body/p/text()')
print(p)
总结:以上使用xpath用起来比较麻烦,类似于绝对路径
我们常常使用下面的语法格式
1.获取文本(也就是获取标签中的内容,标签对中间夹的部分)
< a href=" www.baidu.com">点击跳转至百度</a>
//代表从任意位置出发 []内的属性 是对前面标签的约束,保障唯一性
//标签1[@属性1 = "属性值1"]/标签2[@属性2 = "属性值2"]/.../text()
1)获取a标签中的内容
a = selector.xpath('//div[@id="container"]/a[1]/text()')[0]
print(a)
2)点击跳转至新浪
sina = selector.xpath('//div[@id="conainer"]/a[2]/text()')
sina = sina[0]
print(sina)
2.获取属性值
//标签1[属性1 = "属性值1"]/标签2[属性2 = "属性值2"]/.../@属性名
- 获取鲁班七号详情网址
m = selector.xpath('//div[@id="lu"]/a[1]/@href')
print(m)
访问服务器端的前端代码
使用的是requests
pip install requests #安装requests
import requests #导入
url = 'https://www.baidu.com'
response = requests.get(url) #获取响应
print(response) #200代表响应成功代码
response.encoding = 'utf-8' #修改编码方式
data = response.text
print(data)
with open('baidu.html','w',encoding='UTF-8')as f: # 写入本地 'w' write 写入
f.write(data)
data_content = response.content
print(data_content)
- response.content和 response.text 的区别
-
response.text
返回类型:str
解码类型 根据http头部对响应的编码做出有根据的推测,推测文本编码
修改编码方式:response.encoding = 'utf-8' -
response.content
返回类型:bytes
解码类型 没有指定
修改编码方式:response.content.decode('utf-8')
- 访问知乎
url = 'http://www.zhihu.com'
res = requests.get(url)
print(res.status_code)
# 400 400表示请求失败
#添加headers
#为什么添加headers?
#模拟浏览器访问,欺骗服务器,获取与浏览器一致的内容
#headers 的形式:字典
# 添加header的知乎
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
# User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
response = requests.get(url, headers=headers)
print(response.status_code)
# 200 200代表成功了
*爬取当当网图书信息爬虫
from lxml import html
import requests
def spider(isbn):
"""爬取当当网图书信息爬虫"""
# isbn 国际标准书号
url="http://search.dangdang.com/?key={}&act=input".format(isbn)
print(url)
#获取网页的源代码
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"}
#Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
html_data = requests.get(url, headers=headers).text
#使用xpath语法
selector = html.fromstring(html_data)
#爬取所有书籍的标题
ul_list = selector.xpath('//div[@id="search_nature_rg"]/ul/li')
print('有{}家商铺售卖此书'.format(len(ul_list)))
#遍历
for li in ul_list:
title = li.xpath('a/@title')
print(title)
#获取所有购买链接
link = li.xpath('a/@href')[0]
print(link)
#获取价格
price = li.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')[0]
#去掉¥
price = price.replace('¥', ' ')
print(price)
isbn = input('请输入您要查询的书号')
spider(isbn)
网友评论