#-*- coding:utf-8 -*-
#
#爬取国税门户相关资源文件
#
#
#使用 requests 和lxml 模块
import requests
from lxml import etree
#定义请求的 url ,这里采用手动更换的方式爬取多个url 路径,并定义headers
url = 'http://beijing.chinatax.gov.cn/bjswj/c104354/cs_li_2.shtml'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
#定义request 会话对象
requestsSession = requests.Session()
def getUrl():
#获取页面响应数据的text 格式
responseHtml = requestsSession.get(url=url, headers=headers, timeout=3).text
#使用etree 格式化文本
xpathObj = etree.HTML(responseHtml)
#通过xpath 获取要爬取的资源链接所在页面
dataUrl = xpathObj.xpath('//div[@class="xxgk_tzgg"]/ul//a/@href')
host = 'http://beijing.chinatax.gov.cn'
#遍历列表对象
for i in dataUrl:
print(i)
#重组 资源url
uurl = host + i
RRdata = requestsSession.get(url=uurl, headers=headers, timeout=3).text
xpathRR = etree.HTML(RRdata)
#获取资源路径
dataUrl = xpathRR.xpath('//div[@class="mobile-show"]//div[@class="xwzx_fujian"]/ul//a/@href')
# dataname = xpathRR.xpath('normalize-space(//div[@class="mobile-show"]//div[@class="xwzx_fujian"]/ul//a/text())')
#获取资源a 标签中的名称,因为默认下载的资源名称时英文字符串,
dataname = xpathRR.xpath('//div[@class="mobile-show"]//div[@class="xwzx_fujian"]//li//a/text()')
print(dataname)
print(dataUrl)
# 这一步是将删除将末尾/ 后面内容删除,为后面下载内容构造 url 做准备
hh =uurl[:uurl.rfind('/')]
#名称和资源路径在两个list 中,使用zip 函数可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
for ii,dd in zip(dataUrl,dataname):
getuul = hh + '/' + ii
print(getuul)
#删除中文名称字符串左右两边的空格
cc = str(dd).strip()
r = requestsSession.get(url=getuul, headers=headers, timeout=3)
fp = open(cc,'wb')
fp.write(r.content)
fp.close()
# wget.download(getuul, out=cc)
if __name__ == '__main__':
getUrl()