话说好长时间没写写东西了;人啊;懒起来自己都怕。
这几天好不容易才静下心来学点Python,自己在网上找资料看;自己装环境;自己装IDE;然后对爬虫比较感兴趣;就花了点时间研究下;今天终于算是有点小成果;爬了点图下来。那么;废话不多说;进入主题哈。(此文主要献给跟我一样的小白,有啥错误还望指正)
一.Python的环境、IDE
1.1Python环境
在Window下 可以用anaconda点我下载。这是一个Python的科学计算发行版本,作者打包好多好多的包, 不知道干啥的没关系,你只需要知道拥有它之后,那些Windows下pip安装包报错的问题将不复存在
Mac系统自带Python,但是只有2.几的。不知道是多少的可以进终端查看
chenyouwendeiMac:Desktop chenyouwen$ python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
如果想装3.x以上的 点我飞过去,装好了的话 ,再进终端看下 直接打pyhton3就OK了
chenyouwendeiMac:Desktop chenyouwen$ python 3
python: can't open file '3': [Errno 2] No such file or directory
chenyouwendeiMac:Desktop chenyouwen$ python3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 12 2015, 11:00:19)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Linux的话只用过乌班图好像也是自带Python环境的,这里就不详细介绍了。。。
1.2 IDE的选择
本人用的是PyCharm,Mac版本的传送门 提醒一点,最好选择社区版的因为免费😄
1.3Python版本选择
在PyCharm和Python环境全部装好了之后,就可以切换Python的版本了。
在File中选择Defaluts Setting 这里就可以选择版本了二.需要导入的库
2.1 beautifulsoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.点我查看官方文档
Snip20170914_5.png Snip20170914_6.png2.2Requests urllib的升级版本打包了全部功能并简化了使用方法(点我查看官方文档)
当然你也可以直接用pip导入,一般安装了Python 都可以直接pip的,如果pip不了,试试下面这句话
sudo easy_install pip
三.完事具备 只欠东风
导入库
import requests
from bs4 import BeautifulSoup
import os
配置header 和url
header中的配置信息可以在浏览器中的元素找到,谷歌火狐都行
def mian():
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0",
#可加可不加,因为有的网站做了反爬的
# "Host":"unsplash.com",
# "Referer":"https://unsplash.com/"
}
main_page_url = "http://www.chinanews.com/scroll-news/mil/2017/0110/news.shtml" #要爬的网站
接下来就是使用requests库了
#选择get请求,然后参数直接填,是不是很简单
main_page_result = requests.get(main_page_url, headers = headers)
#打印结果
print(main_page_result.content.decode("gbk"))
打印结果如图
Snip20170914_9.png在接着就是我们的BeautifulSuop了
#使用BeautifulSoup来解析我们获取到的网页(‘lxml’是指定的解析器 具体请参考官方文档哦)
main_suop = BeautifulSoup(main_page_result.content.decode("gbk"),"lxml")
#使用BeautifulSoup解析网页过后就可以用找标签呐!(find_all是查找指定网页内的所有标签的意思,find_all返回的是一个列表。)
main_suop_a = main_suop.find("div",attrs={"class":"tpo"}).find_all("a")
#列表切片,因为最后有一个数据用不到
main_suop_a = main_suop_a[:-1]
print(main_suop_a)
打印结果如下
打印结果接下来遍历这个列表哈
a_text = a.get_text()#获取a标签中的值
a_href = "http:" + a["href"]#获取a标签中的href值,并拼接http
#这里因为取到了a标签中所有的值,但是网页上有的是不需要的,并且其中的值为空,所以在这里加了一个判断用来筛选(我感觉我还是对BeautifulSuop运用不熟,导致没有筛选好 )
if a_text != "":
a_href_result = requests.get(a_href,headers)#用requests对取到的a标签中的href做get请求
a_href_suop = BeautifulSoup(a_href_result.content.decode("gbk"),"lxml")#跟上面的BeautifulSuop用法一样
os.makedirs(os.path.join("/Users/chenyouwen/Desktop/xinwen/", a_text))#创建一个存放套图的文件夹
os.chdir("/Users/chenyouwen/Desktop/xinwen/" + a_text)#切换到上面创建的文件夹
all_img_url = a_href_suop.find("ul", attrs={"id": "scrool_wrap"}).find_all("img")#找到img标签
找到img标签之后再遍历一次就大功告成了
for img_url in all_img_url:
img_src = img_url["src"]#得到img中的src
img_name = img_src[-20:-4]#切片后作为图片的名字
img = requests.get(img_src,headers)#用requests做get请求 跟上面的一个道理
f = open(img_name + ".jpg","ab")#写入多媒体文件必须要 b 这个参数!!必须要!!
f.write(img.content)#多媒体文件要是用conctent
f.close()
如果成功的运行的话 就应该是这个样子的
Snip20170914_12.png
下面是完整的代码
import requests
from bs4 import BeautifulSoup
import os
#coding = utf-8
def mian():
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0",
# "Host":"unsplash.com",
# "Referer":"https://unsplash.com/"
}
main_page_url = "http://www.chinanews.com/scroll-news/mil/2017/0110/news.shtml"
main_page_result = requests.get(main_page_url, headers = headers)
main_suop = BeautifulSoup(main_page_result.content.decode("gbk"),"lxml")
main_suop_a = main_suop.find("div",attrs={"class":"tpo"}).find_all("a")
main_suop_a = main_suop_a[:-1]
print(main_suop_a)
for a in main_suop_a:
a_text = a.get_text()
a_href = "http:" + a["href"]
if a_text != "":
a_href_result = requests.get(a_href,headers)
a_href_suop = BeautifulSoup(a_href_result.content.decode("gbk"),"lxml")
os.makedirs(os.path.join("/Users/chenyouwen/Desktop/xinwen/", a_text))
os.chdir("/Users/chenyouwen/Desktop/xinwen/" + a_text)
# img_count = a_href_suop.find("span",attrs={"id":"showTotal"}).get_text()
all_img_url = a_href_suop.find("ul", attrs={"id": "scrool_wrap"}).find_all("img")
for img_url in all_img_url:
img_src = img_url["src"]
img_name = img_src[-20:-4]
img = requests.get(img_src,headers)
f = open(img_name + ".jpg","ab")
f.write(img.content)
f.close()
mian()
总共下来其实也就不到50行代码,但是自己敲起来效率是真的低。语法跟OC区别有点大的,每次打字符串总是亲不自禁的加@😓。不过相比OC来说 语法确实简单不少。
网友评论