xpath的使用2&3

134 阅读1分钟

还是从最基本的开始,url、resquest的定制、response的请求,等下载使用urlretrieve方法,需要的参数有URL、文件存储的位置等。
需要注意的是,xpath的路径的书写,需要根据请求返回的responst去分析,而不能去网页上找,有可能是找不到的。

import urllib.parse
import urllib.request
from lxml import etree

# 1。获取网页的源码
# 2。解析服务器响应的文件 etree.Html
url='http://www.baidu.com'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}

request=urllib.request.Request(url=url,headers=headers)

response=urllib.request.urlopen(request)

content=response.read().decode('utf-8')

print(content)

# 解析网页源码  获取想要的数据
tree=etree.HTML(content)

# 获取想要的数据 返回值是一个列表类型的值
result=tree.xpath('//input[@id=su]/@value')
print(result)
import urllib.request
from lxml import etree


def create_request(page):
    if(page==1):
        url='https://sc.chinaz.com/tupian/index.html'
    else:
        url='https://sc.chinaz.com/tupian/index_'+str(page)+'.html'
    print(url)
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
    }
    request=urllib.request.Request(url=url,headers=headers)
    return  request

def get_content(request):
    response=urllib.request.urlopen(request)
    content=response.read().decode('utf-8')
    return content

def down_load(content):
   # urllib.request.urlretrieve(content)
    tree=etree.HTML(content)

    name_list=tree.xpath('//div[@class="item"]/img/@alt')

    src_list=tree.xpath('//div[@class="item"]/img/@data-original')

    for i in range(len(name_list)):
       name=name_list[i]
       src=src_list[i]
       url='https:'+src
       print(name,src)

       urllib.request.urlretrieve(url=url,filename='./photo/'+name+'.jpg')





if __name__ == '__main__':
    star_page=int(input('起始页码'))
    end_page=int(input('结束页码'))

    for page in range(star_page,end_page):
        print(page)
        # 请求对象的定制
        request=create_request(page)
        # 获取网页源码
        content=get_content(request)
        # 下载数据
        down_load(content)