使用lxml包,从简单的网页中获取文本和图片
爬取网址:http://www.pythonscraping.com/pages/page3.htm
第一步 ,看网页结构
F12打开开发者模式,大致网页结构如下,看图:
下面这个图片是针对一个tr标签的详解,代码与显示一一对应:
第二步 ,代码解释
lxml简单使用
在自己想爬取的文本位置上单击右键,选择copy–>Xpath,即可获得xpath内容,但需要我们稍作修改。
获得的xpath如下:
//*[@id="gift1"]/td[4]/img
但由于id是变化的,而每项里面的class是不变的,所以修改一下,并加上src属性,得到:
//*[@class="gift"]/td[4]/img/@src
1、获取文本— 以第一个td为例
title = html.xpath('//*[@class="gift"]/td[1]/text()')
2、 获取标签下所有文本——获得第二个td
这里主要是第二部分的描述,td下不仅仅是文本还有span标签,所以如果用text()会出现许多空行并且获取不到span下的文本,这里要用string()
#获得html中所有的class="gift"元素下的所有第二个td子元素
desc = html.xpath('//*[@class="gift"]/td[2]')
for i in range(0,len(desc)):
#处理元素获得字符串
descText = desc[i].xpath('string(.)')
3、 获取图片
获取img标签中的src属性中的内容
imgs=html.xpath('//*[@class="gift"]/td[4]/img/@src')
在读取图片时注意,由于爬取的图片信息是这种形式:../img/gifts/img1.jpg
在保存图片时需要改写一下路径
img = '../img/gifts/img1.jpg'
实际图片路径:
imgUrl = 'http://www.pythonscraping.com/x/'+img
`x/`只是为了多一层,名字随便,抵消掉`../`
第三步 ,所有代码
导入三个包,如果没有该包,就pip install ,但如果pip install lxml 失败,就看看这个 通过lxml的.whl文件来进行安装
import requests
from lxml import etree
import re
#文本信息保存在test.txt
file = open("test.txt",'w',encoding='utf-8')
url = "http://www.pythonscraping.com/pages/page3.html"
res = requests.get(url)
content = res.content
html = etree.HTML(content)
#数据解析
title = html.xpath('//*[@class="gift"]/td[1]/text()')
desc = html.xpath('//*[@class="gift"]/td[2]')
price = html.xpath('//*[@class="gift"]/td[3]/text()')
imgs=html.xpath('//*[@class="gift"]/td[4]/img/@src')
#写入文件
x = len(title)
for i in range(0,x):
# 描述要特别处理
descText = desc[i].xpath('string(.)')
#保存文本信息
file.write("第"+str(i+1)+"行数据"+"\n"+title[i]+"\n"+descText+"\n"+price[i]+"\n\n")
#下载图片
with open('F:\PythonWork\\taobao_code\images\\'+str(i)+'.jpg', 'wb') as fd:
picture=requests.get('http://www.pythonscraping.com/x/'+imgs[i]).content
fd.write(picture)
print("成功下载%s.jpg"%i)
#关闭文件
file.close()
总结
重点注意获取标签里面所有文本内容