python爬虫

urllib用法

eg1:
from urllib import request
data = request.urlopen(urlString).read() # data获取的是该网页的所有源码内容
data=data.decode("utf-8") # 对data编码
import re
pat='<div class="name">(.*?)</div>
res = re.findall(pat,data) # res为一个匹配结果列表
eg2:
request.urlretrieve(url,filename=localfilename) #将url指定的网页爬取至filename中
request.urlcleanup() #当使用了urlretrieve后会产生缓存占用空间,用urlcleanup可以清除缓存
request.info() request.getcode() # 访问返回码 request.geturl() # 获取当前访问的网页
timeout # 超时限制 秒为单位
data = request.urlopen(urlString,timeout=5).read()

自动模拟http请求

import urllib.parse # 数据包
url="http://www.xxx.com"
data=urllib.parse.urlencode({
"name":"xuqiqiang",
"password":"heaoiwoe"
)}.encode("utf-8")
req = request.Request(url,data)
data = request.urlopen(req).read()
fh = open("D:\loadfile.html",'wb')
fh.write(data)
fh.close()
-----------------将请求结果保存完毕

爬虫异常

urllib.error
try:
...
except urllib.error as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)

爬虫的浏览器伪装技术

当爬取网页,返回错误码403说明对方服务器对爬虫屏蔽,此时,不能直接用之前的爬虫方式进行爬取,需要伪装成浏览器进行爬取。
url="http://www.xxx.com"
header = ("user-Agent","...") #第二项为第一项的取值
opener = urllib.request.build_opener()
opener.addheaders=[header]

#第一种写法:
data = opener.open(url).read().decode("utf-8","ignore")
#第二种写法:
opener = urllib.request.build_opener()
opener.addheaders=[header]
urllib.request.instal_opener(opener)
data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
fh=open(filepath,'wb')
fh.write(data)
fh.close()

新闻爬虫实战

import urllib.request
import re
data = urllib.request.urlopen("http://news.sina.com.cn").read()
data = data.decode("utf-8","ignore")
pat = 'href="(http://news.sina.com.cn/.*?)">'
all_url = re.findall(pat,data)
for i in range(len(res)):
 thisurl = all_url[i]
 file = "newsFile"+str(i)+".html"
 try:
  urllib.request.urlretrieve(thisurl,file)
 except urllib.error.URLError as e:
  if hasattr(e,"code"):
   print(e.code)
  if hasattr(e,"reason"):
   print(e.reason)

爬虫防屏蔽之代理服务器

import urllib.request as rq
def use_proxy(url,proxy_addr):
 proxy = rq.ProxyHandler({"http":proxy_addr})
 opener = rq.build_opener(proxy,rq.HTTPHandler)
 rq.install_opener(opener)
 return rq.urlopen(url).read().decode("utf-8","ignore")

淘宝图片爬取

最新文章

  1. &lt;&lt;&lt; 判断提交方式是get还是post
  2. Metatable让我从心认知了Lua(相知篇)
  3. 【BZOJ-2893】征服王 最大费用最大流(带下界最小流)
  4. css在各浏览器中的兼容问题
  5. Learning Scrapy笔记(一)- Scrapy简单介绍
  6. pandas.Panel数据
  7. BZOJ2296: 【POJ Challenge】随机种子
  8. 从一个模板函数聊聊模板函数里面如何获得T的名字
  9. Hibernate(一)之Hibernate入门
  10. Java开发小技巧(三):Maven多工程依赖项目
  11. Android图表库MPAndroidChart(十一)——多层级的堆叠条形图
  12. 【故障公告】推荐系统中转站撑爆服务器 TCP 连接引发的故障
  13. GIt帮助文档之忽略某些文件——忽略python虚拟环境文件夹(转)
  14. 关于Discuz! X系列UC_Server 本地文件包含漏洞
  15. Eclipse中java内存溢出
  16. python测试开发django-47.xadmin上传图片和文件
  17. 【Jmeter基础知识】Jmeter的三种参数化方式
  18. 解决JFinal多文件上传时只获取到第一个文件名
  19. dom4j 通过 org.dom4j.DocumentFactory 设置命名空间来支持 带namespace 的 xpath
  20. Mac Apache Maven 配置

热门文章

  1. PHP关于access_token失效问题
  2. 数据仓库ETL案例学习(一)
  3. on duplicate key update 的使用(数据库有就修改,没有就添加数据)
  4. 网络编程--UDP通讯
  5. C# II: Class ViewModelBase and RelayCommand in MVVM
  6. Docker解决下载镜像速度慢
  7. Python input函数使用
  8. Discovery and auto register
  9. php中static关键字的理解
  10. 浅谈.NET中的反射