还是从最基本的开始,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)