前序:
本人代码经验为零,所以基本没基础。据说python是一门最好学且用途非常大的语言,作为金融产品经理的我,决定还是拿下它。在此记录我的学习过程,也供同样小白的你们参考,大神可以绕道。
再续前序:
走马观花看过一些基础的书籍,但是看过就忘,也不知道哪里是重点,感觉效率并不高。所以还是打算直接小项目入手。在我看来,我想学习的路径是:爬虫,数据分析,前端框架,后台...当然不知道这么分类对不对,根据我走马观花的直觉,我想分为这几个部分去学习hhh(说的不对大神们手下留刀,毕竟我是个没有任何经验的小白)
言归正传
第一步,我们来爬取一个美女网站图吧,先来个简单点的。(p.s. 我是mac+python3.6)
网站:http://www.27270.com/ent/meinvtupian/
就先直接获取到这个页面的所有图片名称和链接好了。如何
1、获取网页内容
2、用BeautifulSoup + 正则,筛选出img标签,得出其src和alt值就好啦
import urllib.request (导入urllib库)
import requests (导入requests库)
from bs4 import BeautifulSoup(BeautifulSoup库)
import re(正则匹配吧?我还不会用正则表达式,只能用这个凑合匹配一下)
url ="http://www.27270.com/ent/meinvtupian/"
headers = {"user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36"}
req = urllib.request.Request(url,headers = headers)
res = urllib.request.urlopen(req)
html = res.read().decode('gbk')
bf = BeautifulSoup(html,"html5lib")
bs = bf.find_all("img",{"src":re.compile(r"http://t1.27270.com/uploads/tu/")})
for av in bs:
print (av.attrs["alt"],av.attrs['src'])
这里有木有贴code的方式啊,不知道展示出来效果如何。
我之前还写了一个,可以按照标签分别建立文件夹,并且把图片下载到对应文件夹的代码,但是写的估计有点垃圾,因为思路不熟,代码写起来一定不好看,我一并贴过来吧,留个纪念。
import urllib.request
import requests
from bs4 import BeautifulSoup
import re
import gzip
import os
# 统一获取网页代码,减少重复操作
def url_anas(url):
headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"}
req_pages = requests.get(url, headers=headers)
bf = BeautifulSoup(req_pages.content, "html5lib")
return bf
# 获取某一个主页的全部图片链接
def get_html(zhuye_url):
bf =url_anas(zhuye_url)
# 测试调用上面函数专用
# print (bf)
pages = int(bf.find("div",class_ = "pages").li.a.string[1:-3])
picurl_list = list()
for i in range(1,pages):
if i ==1:
act_url = zhuye_url
else:
act_url = zhuye_url[:-5]+"_"+str(i)+".html"
bf = url_anas(act_url)
bs = bf.find_all("img",{"src":re.compile(r"http://t1.mmonly.cc/uploads/tu/")})
for each in bs:
picurl_list.append (each.attrs["src"])
return picurl_list
# 该函数根据给到的url列表和名称,创建不同目录,并下载每个目录的图片
def download(zong_url):
toppic_name, new_toppic_urllist = toppic_url(zong_url)
#以下两行为了测试列表是否对应,且正确,测试通过
# for i in range(len(new_toppic_urllist)):
# print (toppic_name[i],new_toppic_urllist[i])
i = 0
for i in range (len(toppic_name)):
file_path = "/Users/baiyeziji/Desktop/python大礼包/" + toppic_name[i]+"/"
os.makedirs(file_path)
picurl_list = get_html(new_toppic_urllist[i])
picurl_list = list(set(picurl_list))
k = 0
for img in picurl_list:
res = requests.get(img)
with open(file_path+str(k)+'.jpg',"wb") as f:
f.write(res.content)
k+=1
s = requests.session()
s.keep_alive = False
i+=1
# 该函数用来获取给定主题页的:女优简介(用来建文件夹)、女优个人页url
def toppic_url(zong_url):
toppic_urllist = list()
toppic_name = list()
bf = url_anas(zong_url)
bs = bf.find_all("a",attrs={"target":"_blank","href":re.compile("http://www.mmonly.cc/mmtp/")})
for each in bs:
toppic_urllist.append(each.attrs['href'])
toppic_name.append(each.get_text())
#去除toppi_name中的空格
for i in toppic_name:
if ""in toppic_name:
toppic_name.remove("")
#去重toppic_url,里面的都有双份,但是顺序不对了,怎么整:后面sort一下,是为了和之前排序相同
new_toppic_urllist = list(set(toppic_urllist))
new_toppic_urllist.sort(key=toppic_urllist.index)
# 返回两个列表
return toppic_name,new_toppic_urllist
# 这里的网页要是各种toppic的首页才可以
zong_url= "http://www.mmonly.cc/tag/yg/"
download(zong_url)
后记
现在继续要学的几个部分,爬取动态数据、学习cookies、搞清楚session,学习下正则表达式。尝试搞搞这几个再说。