我用的是Pycharm编辑器,3.5的python。br/>首先给大家看看源码与成果
#####@Time:2018/10/25
#####@Author:DQ
import requests
from lxml import etree
headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}
html = requests.get("http://tu.duowan.com/tu", headers=headers).text
xpath_url = etree.HTML(html)
picture_url = xpath_url.xpath("//ul[@id=‘pic-list‘]/li/a/img/@src")
for i in picture_url:
picture_code = i[40:-4]
with open("./picture/%s.jpg" % picture_code, "wb") as file:
file.write(requests.get(i).content)
import requests
from lxml import etree
首先两行导入两个库,为了接下来可以使用requests与xpath,不多解释。
headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}
这一行是为了给爬虫加一个头,让服务器认为自己是一个头,接下来会被调用。
html = requests.get("http://tu.duowan.com/tu", headers=headers).text
requests.get(url).text的用法,获取源码,很常用,为了获得源码
xpath_url = etree.HTML(html)
picture_url = xpath_url.xpath("//ul[@id=‘pic-list‘]/li/a/img/@src")
第一行是为了将源码转换为xpath可以识别的格式,很重要,新人很容易忘记,导致后面出错。第二行就是常规的xpath语法了。
想学可以进入下面这个链接看看http://www.w3school.com.cn/xpath/index.asp
for i in picture_url:
picture_code = i[40:-4]
with open("./picture/%s.jpg" % picture_code, "wb") as file:
file.write(requests.get(i).content)
第一行就是简单的for循环,随便看看书或者教程都可以。
第二行是字符串的截取,为了获得图片的非同一标识符。你可以选择任何方式命名,看个人喜好了。
第三行with open() as f:结构,打开一个文件并且作为变量赋值给f。open("./picture/%s.jpg" % picture_code, "wb")是打开当前目录的picture目录,这个目录要线创建。当然你也可以用这行代码一起实现.os.makedirs(‘./picture‘),但是你还得导入os模块,会复杂一点,当然很好用,看个人喜好。如果是一次爬取东西很多很推荐,特别是需要创建很多不同的目录去创建东西的时候,可扩展性比较好。
创建以图片编码为名字的文件设置为wb可写如二进制代码格式,因为图片很多都是二进制格式。
第四行就是简单的文件写入了,写入requests.get(i).content内容,如果想好看一点可以在前面加上一个picture = requests.get(i).content,后面就可以直接file.write(picture)。都是个人喜好,但是注意不要忘记加上get(i)后面这个content,如果不加的话,picture等于一个返回值
兴许是200,这是对的,也可能其他错误返回值。
open用法想学可以参考下面这个链接http://www.runoob.com/python/python-func-open.html
原文地址:http://blog.51cto.com/13603552/2308728