前言
对于一个 net 开发这爬虫真真的以前没有写过. 这段时间学习 python 爬虫, 今天周末无聊写了一段代码爬取上海租房图片, 其实很简短就是利用爬虫的第三方库 Requests 与 BeautifulSoup.python 版本: python3.6 ,IDE :pycharm. 其实就几行代码, 但希望没有开发基础的人也能一下子看明白, 所以大神请绕行.
第三方库
首先安装
我是用的 pycharm 所以另为的脚本安装我这就不介绍了.
如上图打开默认设置选择 Project Interprecter, 双击 pip 或者点击加号, 搜索要安装的第三方库. 其中如果建立的项目多记得 Project Interprecter 要选择正确的安装位置不然无法导入.
Requests 库
requests 库的官方定义: Requests 唯一的一个非转基因的 Python HTTP 库, 人类可以安全享用. 其实他就是请求网络获取网页数据的.
结果如下:
其中 Request Headers 的参数如下:
#headers 的一些属性:
#Accept: 指定客户端能够接收的内容类型, 内容类型的先后次序表示客户都接收的先后次序
#Accept-Lanuage: 指定 HTTP 客户端浏览器用来展示返回信息优先选择的语言
#Accept-Encoding 指定客户端浏览器可以支持的 web 服务器返回内容压缩编码类型. 表示允许服务器在将输出内容发送到客户端以前进行压缩, 以节约带宽. 而这里设置的就是客户端浏览器所能够支持的返回压缩格式.
#Accept-Charset:HTTP 客户端浏览器可以接受的字符编码集
# User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
# Content-Type : 在使用 REST 接口时, 服务器会检查该值, 用来确定 HTTP Body 中的内容该怎样解析.
# application/xml : 在 XML RPC, 如 RESTful/SOAP 调用时使用
# application/json : 在 JSON RPC 调用时使用
# application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
# 在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
BeautifulSoup 库
BeautifulSoup 可以轻松的解析 Requests 库请求的页面, 并把页面源代码解析为 Soup 文档, 一边过滤提取数据. 这是 bs4.2 的文档 .
Beautiful Soup 支持 Python 标准库中的 HTML 解析器, 还支持一些第三方的解析器, 如果我们不安装它, 则 Python 会使用 Python 默认的解析器, 其中 lxml 据说是相对而言比较强大的我下面的暗示是 python 标准库的.
选择器 select
# 选择所有 div 标签
soup.select("div")
# 选择所有 p 标签中的第三个标签
soup.select("p:nth-of-type(3)")
相当于 soup.select(p)[2]
# 选择 div 标签下的所有 img 标签
soup.select("div img")
# 选择 div 标签下的直接 a 子标签
soup.select("div > a")
# 选择 id=link1 后的所有兄弟节点标签
soup.select("#link1 ~ .mybro")
# 选择 id=link1 后的下一个兄弟节点标签
soup.select("#link1 + .mybro")
# 选择 a 标签, 其类属性为 className 的标签
soup.select("a .className")
# 选择 a 标签, 其 id 属性为 idName 的标签
soup.select("a #idName")
# 选择 a 标签, 其属性中存在 attrName 的所有标签
soup.select("a[attrName]")
# 选择 a 标签, 其属性 href=http://wangyanling.com 的所有标签
soup.select("a[href='http://wangyanling.com']")
# 选择 a 标签, 其 href 属性以 http 开头
soup.select('a[href^="http"]')
# 选择 a 标签, 其 href 属性以 lacie 结尾
soup.select('a[href$="lacie"]')
# 选择 a 标签, 其 href 属性包含. com
soup.select('a[href*=".com"]')
# 从 html 中排除某标签, 此时 soup 中不再有 script 标签
[s.extract() for s in soup('script')]
# 如果想排除多个呢
[s.extract() for s in soup(['script','fram']
BeautifulSoup 库需要学习的知识点, 请参考 bs4.2 的文档 . 在这不再过多叙述.
import requests
from bs4 import BeautifulSoup
header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
res=requests.get('http://cd.58.com/zufang/',headers=header)
soup=BeautifulSoup(res.text,'html.parser')
print(soup.prettify())
案例: 爬取上海租房图片
import requests
import urllib.request
import os
import time
from bs4 import BeautifulSoup
header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
url=['http://sh.58.com/zufang/pn{}/?ClickID=2'.format(number) for number in range(1,5)]# 分页抓取
adminCout=0
for arurl in url:
adminCout=adminCout+1
time.sleep(5)
res=requests.get(arurl,headers=header)
soup=BeautifulSoup(res.text,'html.parser')
arryImg=soup.select('.img_list img')
print(arryImg)
count = 0;
for img in arryImg:
print(img['lazy_src'])
_url = img['lazy_src']
pathName = "E:\\wyl\\" + str(adminCout)+"_"+str(count) + ".jpg" # 设置路径和文件名
result = urllib.request.urlopen(_url) # 打开链接, 和 python2.x 不同请注意了
data = result.read() # 否则开始下载到本地
with open(pathName, "wb") as code:
code.write(data)
code.close()
count = count + 1 # 计数 + 1
print("正在下载第:", count)
只是实现功能, 至于代码结果如下:
结语:
对于 python 并非为了从 net 跳出来, 学习 python 只是感兴趣, 但是通过这段时间的学习确实有些思想从 net 的思路中跳了出来, 接下来一年的业余时间应该都会花在学习 python 上, 还希望自己能坚持下去. 这应该是 2018 最后一篇文章, 在这给大家拜个早年.
来源: https://www.cnblogs.com/kmonkeywyl/p/8409715.html