lxml(xpath)
首先安装一个神器总比正则直观,毕竟正则你得输出了才知道获取的数据(像我这种正则比较渣的完全不能确定对不对).而xpath
可以直观的看到.
打开谷歌浏览器 右上角打开
用谷歌商店下载一个XPath Helper. 网上很多教程 可以去试试,我感觉挺好用的
关于语法–>XPath语法
还是以树洞刚才那个二熊做例子
这样就能直观的验证语法对不对了
好吧 我又不懂从哪里撸来了一个美女姐姐的博客 , 刚好试试XPath的威力
思路:找到需要的数据的祖宗–>最小的儿子–>@我们的数据
OK,还是爬虫核心套路(与re不同的发现了吗!):
import urllib.request
from lxml import etree
def create_request():
url = 'http://loftermeirenzhi.lofter.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
}
req = urllib.request.Request(url=url, headers=headers)
return req
def download_content(req):
res = urllib.request.urlopen(req)
content = res.read().decode('utf-8')
return content
def parse_content(content):
# XPath语法
img_xpath = '//div[@class="m-postlst box"]//div[@class="pic"]/a//@src'
# 封装成HTML
tree = etree.HTML(content)
# 在用XPath语法解析
img_list = tree.xpath(img_xpath)
return img_list
def save_images(img_list, path):
# 这个j是不是很巧妙呀
j = 1
# 将爬取回来的网页进行整理
for src in img_list:
url_src = src.split('?')[0]
# 拿出格式
img_pattern = url_src.split(".")[-1]
# 构建图片名字
file_name = path + "/" + str(j) + "." + img_pattern
urllib.request.urlretrieve(url_src, file_name)
j += 1
def main():
path = "./image_girl"
# 创建请求
req = create_request()
# 下载数据
content = download_content(req)
# 解析数据
image_girl = parse_content(content)
# 保存数据
save_images(image_girl, path)
if __name__ == "__main__":
main()
这样是不是就满足了啊!!! 我觉得还有待发掘的地方 不出我所料
点开这个就发现成套成套小姐姐美图,不得了那不是就得继续啦
功夫不负好色心,终于一顿排错之后得到了
200多张套图 全是高清的下载起来有点慢(记得设置点时间- -不然这样对人家服务器不友好),听说有分布式爬虫几秒就搞定了 = =暂时还不会
import urllib.request
from lxml import etree
import time
def create_request():
url = 'http://loftermeirenzhi.lofter.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
}
req = urllib.request.Request(url=url, headers=headers)
return req
def download_content(req):
res = urllib.request.urlopen(req)
content = res.read().decode('utf-8')
return content
def parse_content(content):
# XPath语法
img_xpath_href = '//div[@class="m-postlst box"]//div[@class="pic"]/a//@href'
# 名字
# 封装成HTML
tree = etree.HTML(content)
# 在用XPath语法解析
img_set = tree.xpath(img_xpath_href)
# 得到我们的成套成套小姐姐的网站列表
return img_set
def set_img(img_set):
dict_gril = {}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
}
for href in img_set:
url = '{}'.format(href)
req = urllib.request.Request(url=url, headers=headers)
content = download_content(req)
gril_href = '//div[@class="g-mn"]//div[@class="pic"]/a//@src'
# //div[@class="g-mn"]//div[@class="text"]/p 不行 其实我也不知道为啥 - - 应该是没有text()吧
name_href = '//div[@class="g-mn"]//div[@class="text"]/p/a/text()'
tree = etree.HTML(content)
# 图片集
gril_set = tree.xpath(gril_href)
# 名字
bozhu = tree.xpath(name_href)
# 这个是列表 得弄成str
bozhu_name = ''.join(bozhu)
# 转成字典好按名字存储
dict_gril[bozhu_name] = gril_set[:]
time.sleep(2)
return dict_gril
def save_images(dict_gril, path):
# 将爬取回来的网页进行整理
for key, value in dict_gril.items():
j = 1
for src in value:
url_src = src.split('?')[0]
# 拿出格式
img_pattern = url_src.split(".")[-1]
# 构建图片名字 因为key哪里名字有:所以得取到最后第二位而已
file_name = path + "/" + key[:-1] + '_{}'.format(j) + "." + img_pattern
urllib.request.urlretrieve(url_src, file_name)
j += 1
def main():
path = "./image_girl"
# 创建请求
req = create_request()
# 下载数据
content = download_content(req)
# 解析数据
img_set = parse_content(content)
dict_gril = set_img(img_set)
# 保存数据
save_images(dict_gril, path)
if __name__ == "__main__":
main()
然后按照这思路 没有反爬手段网站对我们来说都轻而易举可以爬取啦 = =
继续下一个用法