网络爬虫(七)

网页解析上比较直观还是用xpath解析。这种解析方法充分运用html标签结构,通过树状结构,一层层定位到标签。

下面代码例子是取出网页的图片存在本地,分析网页结构如下图:
  • 用tree=etree.HTML(pagetext)语句生成etree对象,
  • 需要注意xpath('表达式')返回的是列表,不要当成string,所以利用索引取得相应的字符串。如: image_src=image.xpath('./@src')[0] , name=image.xpath('./@alt')[0]
  • 需要注意xpath返回列表从1开始计数,不是从0开始。mglist=tree.xpath('//div[@class="article font16"]/p[3]/img')
from lxml import etree
import os
import requests

if __name__=='__main__':

    if not os.path.exists("./images1"):
        os.mkdir("./images1")

    url="http://www.heiguang.com/photography/pandp/20160105/63228.html"
    headers={ "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}

    pagetext=requests.get(url=url,headers=headers).text#取得整个页面文本
    tree=etree.HTML(pagetext)

    imglist=tree.xpath('//div[@class="article font16"]/p[3]/img')
    for image in imglist:
        image_src=image.xpath('./@src')[0]
        image_content=requests.get(url=image_src,headers=headers).content
        print(image_src)
        name=image.xpath('./@alt')[0]+image_src.split('/')[-1]
        name=name.encode('iso-8859-1').decode('utf-8')
        image_path="./images1/" + name


        print(image_path)
        with open(image_path,"wb") as fp:
            fp.write(image_content)
    print("end")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章