python爬虫常用的库:Python 库(urllib、BeautifulSoup、requests、scrapy)实现网页爬虫
python爬虫最简单案例分析: 对一个html文件进行分解,获取里面想要的数据
**
百里守约
**
**import requests
from lxml import etree
tree = etree.parse("E:\odoo14\odoo14\myaddons\demo.html") # 获取html文件
tang_info = tree.xpath("//div[@class='tang']/ul/li/a/text()") # 获取标签里的文本
print('tang_info', tang_info)
song_info = tree.xpath("//div[@class='song']/p/text()") #找到div的class 是song的,标签是p的文本
print('song_info', song_info)
song_src = tree.xpath("//div[@class='song']/img/@src")** #找 到div的class 是song的,的img属性
**print('song_src', song_src) # song_src ['http://www.baidu.com/meinv.jpg']
song_src_a = tree.xpath("//div[@class='song']/a/text()")
print('song_src_a', song_src_a)
# song_src_a ['\n ', '\n 宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱', '总为浮云能蔽日,长安不见使人愁']**
1、/ 表示从根节点选取
2、// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
3、@ 选取属性 返回所指元素的文本内容。
4、text() 返回所指元素的文本内容
4.1、string() 函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。
4.3、data():data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。
注意:爬取内容都为数字的时候只能使用data(),不能使用text()或 string(),因为XPath不支持字符串做数学运算。
案例:song_info = tree.xpath("//div[@class='song']/p/text()") #找到div的class 是song的,标签是p的文本
5.查找页面上第一个form元素://form[1]
6.查找页面上id为loginForm的form元素://form[@id=‘loginForm’]
7、/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
8、/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
案例2:分析结构:
链接:首页 url = 'http://pic.netbian.com/4kqiche/'
后面分页:url = 'https://pic.netbian.com/4kqiche/index_%s.html' % page
import requests
from lxml import etree
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
for page in range(1, 23):
if page == 1:
url = 'http://pic.netbian.com/4kqiche/'
else:
url = 'https://pic.netbian.com/4kqiche/index_%s.html' % page
response = requests.get(url=url, headers=headers)
# response.encoding = 'utf-8' #手动设定响应数据的编码
page\_text = response.text
# 数据解析(图片地址,图片名称)
tree = etree.HTML(page\_text)
# li\_list = tree.xpath('//div\[@class="slist"\]/ul/li')
li\_list = tree.xpath('//ul\[@class="clearfix"\]/li')
print('------------page--------------:', page)
for li in li\_list:
# 局部内容解析一定是以./开头。etree和element都可以调用xpath
img\_src = 'http://pic.netbian.com' + li.xpath('./a/img/@src')\[0\] # 解析出来的没有域名,要加上
img\_name = li.xpath('./a/img/@alt')\[0\] # 不要忘记前面加点号,表示从当前li标签开始
img\_name = img\_name.encode('iso-8859-1').decode('gbk') # 处理中文乱码的通用形式
img\_data = requests.get(url=img\_src, headers=headers).content
img\_path = 'E://DEMO//' + img\_name + '.jpg' # windows环境下://来表示
with open(img\_path, 'wb') as fp:
fp.write(img\_data)
print(img\_name, '下载成功!!!')
手机扫一扫
移动阅读更方便
你可能感兴趣的文章