python基础-爬虫
- 爬虫引入
爬虫:
1 百度:搜索引擎
爬虫:spider 种子网站开始爬,下载网页,分析链接,作为待抓取的网页
分词
index:词---》某个结果
Page rank(1 网站很大(互链) 2 包含多少个词 3 更新频率 )
cache:缓存里面
为啥哈希快:
书的目录
hash(xxx)---->内存地址---》保存
查找hash(xxx)---》获取到内存地址---》找
练习:写一个爬虫脚本,抓取出搜狐上所有的链接
步骤: 1 打开sohu网页 2 分析页面中所有的链接 3 打印所有的链接内容(re.findall 查找全部链接),看看是否有非法的链接地址 4 过滤掉非法的链接地址
# -*- coding: utf-8 -*- #
import requests
import re
resq = requests.get("http://www.sohu.com/")
print resq.text[:500]
links = re.findall(r'href="(.*?)"', resq.text)
print len(links)
valid_link = []
invalid_link = []
for link in links:
#先看一下前200个链接里面有啥,主要思路是根据打印出来的结果去判定该去除哪些内容
#for link in links[:200]:
#print link
if re.search(r"(\.jpg)|(\.jpeg)|(\.gif)|(\.ico)|(\.png)|(\.js)|(\.css)$", link.strip()): #排除结尾是图片的
print 6, link
invalid_link.append(link.strip())
continue
if link.strip() == "" or link.strip() == "#" or link.strip() == "/": #排除#号、空格
# print 1,link
invalid_link.append(link)
continue
elif link.strip().startswith("//"):
# print 2,link
valid_link.append("http:" + link.strip())
continue
elif link.strip().count("javascript") >= 1 or link.strip().count("mailto:") >= 1:#排除javascript
# print 3,link
invalid_link.append(link.strip())
continue
elif re.match(r"/\w+", link): #相对链接进行匹配
# print 5,link
if re.match(r"http://.*?/",resq.url.strip()):
valid_link.append(re.match(r"http://.*?/",resq.url.strip()).group()+link.strip())
else:
valid_link.append(re.match(r"http://.*",resq.url.strip()).group()+link.strip())
continue
else:
# print 7,link
valid_link.append(link.strip())
# for link in valid_link[:100]:
# print link
print len(valid_link)
# for link in invalid_link:
# print link
print len(invalid_link)
变形练习: 把首页中带篮球的页面全部下载下来
# -*- coding: utf-8 -*- #
import requests
import re
resq = requests.get("http://www.sohu.com/")
#print resq.text[:500]
links = re.findall(r'href="(.*?)"', resq.text)
#print len(links)
valid_link = []
invalid_link = []
for link in links:
#先看一下前200个链接里面有啥,主要思路是根据打印出来的结果去判定该去除哪些内容
#for link in links[:200]:
#print link
if re.search(r"(\.jpg)|(\.jpeg)|(\.gif)|(\.ico)|(\.png)|(\.js)|(\.css)$", link.strip()): #排除结尾是图片的
#print 6, link
invalid_link.append(link.strip())
continue
if link.strip() == "" or link.strip() == "#" or link.strip() == "/": #排除#号、空格
# print 1,link
invalid_link.append(link)
continue
elif link.strip().startswith("//"):
# print 2,link
valid_link.append("http:" + link.strip())
continue
elif link.strip().count("javascript") >= 1 or link.strip().count("mailto:") >= 1:#排除javascript
# print 3,link
invalid_link.append(link.strip())
continue
elif re.match(r"/\w+", link): #相对链接进行匹配
# print 5,link
if re.match(r"http://.*?/",resq.url.strip()):
valid_link.append(re.match(r"http://.*?/",resq.url.strip()).group()+link.strip())
else:
valid_link.append(re.match(r"http://.*",resq.url.strip()).group()+link.strip())
continue
else:
# print 7,link
valid_link.append(link.strip())
# for link in valid_link[:100]:
# print link
#print len(valid_link)
# for link in invalid_link:
# print link
#print len(invalid_link)
file_num =1
for link in valid_link:
#print link
resq = requests.get(link)
if u"篮球" in resq.text: #如果是二进制的文件,就用content找
if u'meta charset="utf-8"' in resq.text: #判断一下当前页面的格式
with open(r"e:\\pic\\"+str(file_num )+".html","w") as fp:
fp.write(resq.text.strip().encode("utf-8"))
else:
with open(r"e:\\pic\\"+str(file_num )+".html","w") as fp:
fp.write(resq.text.strip().encode("gbk"))
file_num +=1 #文件名累加
print "Done!"
练习2:下载所有美女图片 http://www.meituri.com
自己:
# -*- coding: utf-8 -*- #
import requests
import re
resq = requests.get("http://www.win4000.com/meinvtag34.html")
#print resq.text[:100]
#<img src="http://i.situmei.com/a/1/7215/0.jpg">
links = re.findall(r'src="(.*?)"', resq.text)
#print len(links) #打印有多少个src
valid_link = []
invalid_link = []
pic_num = 0
for link in links:
#print link #打印所有src匹配的结果,结果中发现有js的并不是图片,需要去除
if re.search(r"(\.jpg)|(\.jpeg)|(\.gif)|(\.ico)|(\.png)$",link.strip()): #找出所有图片链接
pic_num += 1
# print link #打印出图片链接
resq1 = requests.get(link.strip(),allow_redirects=True)
print resq1
with open(r"e:\\pic\\" + str(pic_num) + ".png", "wb") as fp:
fp.write(resq1.content)
print pic_num #打印图片总个数
老师:
# -*- coding: utf-8 -*- #
import requests
import re
import urllib
resq = requests.get("http://www.win4000.com/meinvtag34.html")
link1s = re.findall(r'img src="(.*?)"', resq.text)
link2s = re.findall(r'data-original="(.*?)"', resq.text) #直接用地址下载不行,一些网站缩略图和进入的大图不一致,加载大图费时
#import re
#print re.findall(r'src="(.*?)"|data-original="(.*?)"','src="1.jpg" data-original="2.jpg"') 或者直接用正则也可以
print link2s
valid_link = []
links = link1s + link2s
print len(links)
for link in links:
if re.search(r"(\.jpg)|(\.jpeg)|(\.gif)$", link.strip()):
# print 6,link
valid_link.append(link.strip())
continue
# for link in valid_link[:100]:
# print link
print len(valid_link)
file_num = 1
for link in list(set(valid_link)):
print link
resq1 = requests.get(link.strip(), allow_redirects=True)
print "final url:", resq1.url
# print resq1.text
with open(r"e:\\pic\\" + str(file_num) + ".jpg", "wb") as fp:
fp.write(resq1.content)
file_num += 1
print "Done!"
老师:
# -*- coding: utf-8 -*- #
import requests
import re
import urllib
resq = requests.get("http://www.win4000.com/meinvtag34.html")
link1s = re.findall(r'img src="(.*?)"', resq.text)
link2s = re.findall(r'data-original="(.*?)"', resq.text) #直接用地址下载不行,一些网站缩略图和进入的大图不一致,加载大图费时
#import re
#print re.findall(r'src="(.*?)"|data-original="(.*?)"','src="1.jpg" data-original="2.jpg"') 或者直接用正则也可以
print link2s
valid_link = []
links = link1s + link2s
print len(links)
for link in links:
if re.search(r"(\.jpg)|(\.jpeg)|(\.gif)$", link.strip()):
# print 6,link
valid_link.append(link.strip())
continue
# for link in valid_link[:100]:
# print link
print len(valid_link)
file_num = 1
for link in list(set(valid_link)):
print link
resq1 = requests.get(link.strip(), allow_redirects=True)
print "final url:", resq1.url
# print resq1.text
with open(r"e:\\pic\\" + str(file_num) + ".jpg", "wb") as fp:
fp.write(resq1.content)
file_num += 1
print "Done!"
python基础-爬虫的更多相关文章
- Python基础+爬虫基础
Python基础+爬虫基础 一.python的安装: 1.建议安装Anaconda,会自己安装一些Python的类库以及自动的配置环境变量,比较方便. 二.基础介绍 1.什么是命名空间:x=1,1存在 ...
- 零python基础--爬虫实践总结
网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 爬虫主要应对的问题:1.http请求 2.解析html源码 3.应对反爬机制. 觉得爬虫挺有意思的,恰好看到知乎有人分享的一个爬虫 ...
- Python基础爬虫
搭建环境: win10,Python3.6,pycharm,未设虚拟环境 之前写的爬虫并没有架构的思想,且不具备面向对象的特征,现在写一个基础爬虫架构,爬取百度百科,首先介绍一下基础爬虫框架的五大模块 ...
- Python 基础爬虫架构
基础爬虫框架主要包括五大模块,分别为爬虫调度器.url管理器.HTML下载器.HTML解析器.数据存储器. 1:爬虫调度器主要负责统筹其他四个模块的协调工作 2: URL管理器负责管理URL连接,维护 ...
- Python基础——爬虫以及简单的数据分析
目标:使用Python编写爬虫,获取链家青岛站的房产信息,然后对爬取的房产信息进行分析. 环境:win10+python3.8+pycharm Python库: import requests imp ...
- python基础爬虫,翻译爬虫,小说爬虫
基础爬虫: # -*- coding: utf-8 -*- import requests url = 'https://www.baidu.com' # 注释1 headers = { # 注释2 ...
- python 基础-爬虫-数据处理,全部方法
生成时间戳 1. time.time() 输出 1515137389.69163 ===================== 生成格式化的时间字符串 1. time.ctime() 输出 Fri Ja ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
随机推荐
- mkcert本地 HTTPS 加密证书生成工具
软件介绍: mkcert 是一个生成本地 HTTPS 加密证书的工具,一个命令就可以生成证书,不需要任何配置. 下载地址: https://github.com/FiloSottile/mkcert/ ...
- C# 对接腾讯企业邮接口----get/post请求
在无所知之的情况下.来了一个对接接口的任务,没办法,只能根据前端时候的经验硬着头皮上了,随后又整理了一下写的方法,主要包括了部门的创建.更新.删除.查找.然后他们的前提是token的获取 首先HTTP ...
- 收集的20个非常有用的Java程序片段
下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...
- zabbix2升级zabbix3
1.停服zabbix2,停服数据库/etc/init.d/zabbix_server stop/etc/init.d/mysqld stop 2.物理备份数据库cd /var/lib/mysql/ta ...
- [转载]—Health Check Reports Problem: Dependency$ p_timestamp mismatch for VALID objects (文档 ID 781959.1)
Health Check Reports Problem: Dependency$ p_timestamp mismatch for VALID objects (文档 ID 781959.1) AP ...
- POJ Charlie's Change 查理之转换(多重背包,变形)
题意: 给定身上的4种硬币,分别是1 ,5 ,10, 25面额各有多张,要求组成面额p的硬币尽可能多.输出组成p的4种硬币各自的数量. 思路: 多重背包,300+ms.用01背包+二进制的方法.记录下 ...
- 洛谷 P2691 逃离
题目描述 一个n×n栅格是由n行和n列顶点组成的一个无向图,如图所示.用(i,j)表示处于第i行第j列的顶点.除了边界顶点(即满足i=1,i=n,j=1或j=n的顶点(i,j)),栅格中的所有其他顶点 ...
- 日常-acm-子序列的和
输入两个正整数n<m<10^6,输出,保留五位小数.输入包含多组数据,结束标记为n=m=0. 样例输入: 2 4 65536 655360 0 0 样例输出: Case 1:0.42361 ...
- .vue公共组件裁减导航
场景: 有一个公共头部和底部,vue搭建的框架,在app.vue里写的公共方法,首页是个登录页面,不需要公共部分,在这基础上进行公共部分的显示隐藏. 即注册页.登录页.404页面都不要导航 代码: ( ...
- 【转】BP神经网络
学习是神经网络一种最重要也最令人注目的特点.在神经网络的发展进程中,学习算法的研究有着十分重要的地位.目前,人们所提出的神经网络模型都是和学习算 法相应的.所以,有时人们并不去祈求对模型和算法进行严格 ...