
网页爬虫抓取百度图片
网页爬虫抓取百度图片( Python3实战入门数据库篇--把爬取到的数据存到数据库)
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2021-12-31 09:20
Python3实战入门数据库篇--把爬取到的数据存到数据库)
# 简单的网络爬虫
from urllib import request
import chardet
response = request.urlopen("http://www.jianshu.com/")
html = response.read()
charset = chardet.detect(html)# {'language': '', 'encoding': 'utf-8', 'confidence': 0.99}
html = html.decode(str(charset["encoding"])) # 解码
print(html)
由于爬取的html文档比较长,这里发个简单的帖子给大家看看
..........后面省略一大堆
这是对Python3的爬虫的简单介绍。是不是很简单?我建议你输入几次。
三、Python3抓取网页中的图片并将图片保存到本地文件夹
目标
import re
import urllib.request
#爬取网页html
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html
html = getHtml("http://tieba.baidu.com/p/3205263090")
html = html.decode('UTF-8')
#获取图片链接的方法
def getImg(html):
# 利用正则表达式匹配网页里的图片地址
reg = r'src="([.*S]*.jpg)" pic_ext="jpeg"'
imgre=re.compile(reg)
imglist=re.findall(imgre,html)
return imglist
imgList=getImg(html)
imgCount=0
#for把获取到的图片都下载到本地pic文件夹里,保存之前先在本地建一个pic文件夹
for imgPath in imgList:
f=open("../pic/"+str(imgCount)+".jpg",'wb')
f.write((urllib.request.urlopen(imgPath)).read())
f.close()
imgCount+=1
print("全部抓取完成")
迫不及待想看看有哪些美图被爬了
爬24个女孩的照片真是太容易了。是不是很简单。
四、Python3抓取新闻网站新闻列表
这里稍微复杂一点,给大家解释一下。
分析上图,我们要抓取的信息在div中的a标签和img标签中,所以我们要考虑的就是如何获取这些信息
这里要用到我们导入的BeautifulSoup4库,这里是关键代码
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
上面代码得到的allList就是我们要获取的新闻列表,抓到的如下
[

,

,

,

,

,

,

,

,

,

,

]
这里的数据是抓到的,但是太乱了,还有很多不是我们想要的,下面就是通过遍历提取我们的有效信息
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
这里添加了异常处理,主要是因为有些新闻可能没有标题,没有网址或图片。如果不进行异常处理,可能会导致我们的爬行中断。
过滤后的有效信息
标题 标题为空
url: https://www.huxiu.com/article/211390.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 TFBOYS成员各自飞,商业价值天花板已现?
url: https://www.huxiu.com/article/214982.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 买手店江湖
url: https://www.huxiu.com/article/213703.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 iPhone X正式告诉我们,手机和相机开始分道扬镳
url: https://www.huxiu.com/article/214679.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 信用已被透支殆尽,乐视汽车或成贾跃亭弃子
url: https://www.huxiu.com/article/214962.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 别小看“搞笑诺贝尔奖”,要向好奇心致敬
url: https://www.huxiu.com/article/214867.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 10 年前改变世界的,可不止有 iPhone | 发车
url: https://www.huxiu.com/article/214954.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 感谢微博替我做主
url: https://www.huxiu.com/article/214908.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 苹果确认取消打赏抽成,但还有多少内容让你觉得值得掏腰包?
url: https://www.huxiu.com/article/215001.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 中国音乐的“全面付费”时代即将到来?
url: https://www.huxiu.com/article/214969.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 百丽退市启示录:“一代鞋王”如何与新生代消费者渐行渐远
url: https://www.huxiu.com/article/214964.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
这里我们抓取新闻网站新闻信息就大功告成了,下面贴出完整代码
from bs4 import BeautifulSoup
from urllib import request
import chardet
url = "https://www.huxiu.com"
response = request.urlopen(url)
html = response.read()
charset = chardet.detect(html)
html = html.decode(str(charset["encoding"])) # 设置抓取到的html的编码方式
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
一旦获得了数据,我们仍然需要将数据存储在数据库中。只要存储在我们的数据库中,并且数据库中有数据,我们就可以进行后续的数据分析处理,或者使用爬取的文章,给app提供新闻api接口。当然,这是一个故事。自学Python数据库操作后,再写一篇文章
《Python3数据库实战入门-将爬取到的数据存入数据库》
编程小石头,为分享干货而生!据说,每一个年轻、上进、高颜值的互联网人,都会关注编程小石头。 查看全部
网页爬虫抓取百度图片(
Python3实战入门数据库篇--把爬取到的数据存到数据库)
# 简单的网络爬虫
from urllib import request
import chardet
response = request.urlopen("http://www.jianshu.com/")
html = response.read()
charset = chardet.detect(html)# {'language': '', 'encoding': 'utf-8', 'confidence': 0.99}
html = html.decode(str(charset["encoding"])) # 解码
print(html)
由于爬取的html文档比较长,这里发个简单的帖子给大家看看
..........后面省略一大堆
这是对Python3的爬虫的简单介绍。是不是很简单?我建议你输入几次。
三、Python3抓取网页中的图片并将图片保存到本地文件夹
目标
import re
import urllib.request
#爬取网页html
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html
html = getHtml("http://tieba.baidu.com/p/3205263090")
html = html.decode('UTF-8')
#获取图片链接的方法
def getImg(html):
# 利用正则表达式匹配网页里的图片地址
reg = r'src="([.*S]*.jpg)" pic_ext="jpeg"'
imgre=re.compile(reg)
imglist=re.findall(imgre,html)
return imglist
imgList=getImg(html)
imgCount=0
#for把获取到的图片都下载到本地pic文件夹里,保存之前先在本地建一个pic文件夹
for imgPath in imgList:
f=open("../pic/"+str(imgCount)+".jpg",'wb')
f.write((urllib.request.urlopen(imgPath)).read())
f.close()
imgCount+=1
print("全部抓取完成")
迫不及待想看看有哪些美图被爬了

爬24个女孩的照片真是太容易了。是不是很简单。
四、Python3抓取新闻网站新闻列表
这里稍微复杂一点,给大家解释一下。

分析上图,我们要抓取的信息在div中的a标签和img标签中,所以我们要考虑的就是如何获取这些信息
这里要用到我们导入的BeautifulSoup4库,这里是关键代码
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
上面代码得到的allList就是我们要获取的新闻列表,抓到的如下
[

,

,

,

,

,

,

,

,

,

,

]
这里的数据是抓到的,但是太乱了,还有很多不是我们想要的,下面就是通过遍历提取我们的有效信息
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
这里添加了异常处理,主要是因为有些新闻可能没有标题,没有网址或图片。如果不进行异常处理,可能会导致我们的爬行中断。
过滤后的有效信息
标题 标题为空
url: https://www.huxiu.com/article/211390.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 TFBOYS成员各自飞,商业价值天花板已现?
url: https://www.huxiu.com/article/214982.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 买手店江湖
url: https://www.huxiu.com/article/213703.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 iPhone X正式告诉我们,手机和相机开始分道扬镳
url: https://www.huxiu.com/article/214679.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 信用已被透支殆尽,乐视汽车或成贾跃亭弃子
url: https://www.huxiu.com/article/214962.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 别小看“搞笑诺贝尔奖”,要向好奇心致敬
url: https://www.huxiu.com/article/214867.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 10 年前改变世界的,可不止有 iPhone | 发车
url: https://www.huxiu.com/article/214954.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 感谢微博替我做主
url: https://www.huxiu.com/article/214908.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 苹果确认取消打赏抽成,但还有多少内容让你觉得值得掏腰包?
url: https://www.huxiu.com/article/215001.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 中国音乐的“全面付费”时代即将到来?
url: https://www.huxiu.com/article/214969.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 百丽退市启示录:“一代鞋王”如何与新生代消费者渐行渐远
url: https://www.huxiu.com/article/214964.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
这里我们抓取新闻网站新闻信息就大功告成了,下面贴出完整代码
from bs4 import BeautifulSoup
from urllib import request
import chardet
url = "https://www.huxiu.com"
response = request.urlopen(url)
html = response.read()
charset = chardet.detect(html)
html = html.decode(str(charset["encoding"])) # 设置抓取到的html的编码方式
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
一旦获得了数据,我们仍然需要将数据存储在数据库中。只要存储在我们的数据库中,并且数据库中有数据,我们就可以进行后续的数据分析处理,或者使用爬取的文章,给app提供新闻api接口。当然,这是一个故事。自学Python数据库操作后,再写一篇文章
《Python3数据库实战入门-将爬取到的数据存入数据库》
编程小石头,为分享干货而生!据说,每一个年轻、上进、高颜值的互联网人,都会关注编程小石头。
网页爬虫抓取百度图片(百度网页搜索还支持多种搜索结果块,计算块等多样的截图)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-12-30 22:21
百度蜘蛛是一个基于Python的百度搜索结果爬虫,支持多搜索结果。本期文章将从多方面介绍百度蜘蛛。
什么是百度蜘蛛?
百度蜘蛛是一个强大但轻量级的百度搜索结果提取器,基于BeautifulSoup4和requests。支持多种搜索结果,包括百度网页搜索、百度图片搜索、百度知道搜索、百度视频搜索、百度新闻搜索、百度图书馆搜索、百度体验搜索、百度百科搜索。其中,百度网页搜索还支持多种搜索结果块,如百科块、贴吧块、计算块等搜索结果。
GitHub: /BaiduSpider/BaiduSpider
文档:
PyPI: /project/BaiduSpider/
如何下载百度蜘蛛?
在你的项目中,直接使用pip安装:
pip install baiduspider
当然,你也可以从 GitHub 克隆:
git clone https://github.com/BaiduSpider/BaiduSpider.git && python setup.py install
然后导入您的项目文件:
from baiduspider import BaiduSpider
# ...
百度蜘蛛使用简单
百度蜘蛛的使用也很简单。下面的例子打印了BaiduSpider的网页搜索的返回结果,它是网页搜索CLI的简单版本:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input()))
对于上面例子的输出
这个怎么样?是不是很简单?除了易用性,百度蜘蛛还支持自定义返回值。例如,我只想查看最常见的网络搜索结果,没有其他花里胡哨的东西。然后,我可以写:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input(), exclude=['all']))
只保留正常搜索结果输出的截图
是的,只有一个参数:exclude。这个参数很强大,有兴趣可以去文档看看。
使用百度蜘蛛制作的项目
这里我选择了两个用BaiduSpider做的开源项目,聚合搜索和标题拍拍。下面我分别介绍一下这两个项目。
聚合搜索
聚合搜索是一个聚合搜索引擎,现已接入百度、谷歌、搜狗、微信四大平台。在线演示:/GitHub:/Limourli-liu/Aggregate-search
拍
这是一个利用深度学习技术自动解决小学应用问题的入口,数据抓取部分使用了百度蜘蛛。GitHub: /jackli777/CCF-BDCI-2020-MWP-
最后
如果你喜欢百度蜘蛛这个项目,请留下你的star!您的支持对我们真的很重要~
GitHub项目地址:/BaiduSpider/BaiduSpider
文档:baiduspider.github.io/
PyPI: /project/BaiduSpider/
谢谢阅读! 查看全部
网页爬虫抓取百度图片(百度网页搜索还支持多种搜索结果块,计算块等多样的截图)
百度蜘蛛是一个基于Python的百度搜索结果爬虫,支持多搜索结果。本期文章将从多方面介绍百度蜘蛛。
什么是百度蜘蛛?
百度蜘蛛是一个强大但轻量级的百度搜索结果提取器,基于BeautifulSoup4和requests。支持多种搜索结果,包括百度网页搜索、百度图片搜索、百度知道搜索、百度视频搜索、百度新闻搜索、百度图书馆搜索、百度体验搜索、百度百科搜索。其中,百度网页搜索还支持多种搜索结果块,如百科块、贴吧块、计算块等搜索结果。
GitHub: /BaiduSpider/BaiduSpider
文档:
PyPI: /project/BaiduSpider/
如何下载百度蜘蛛?
在你的项目中,直接使用pip安装:
pip install baiduspider
当然,你也可以从 GitHub 克隆:
git clone https://github.com/BaiduSpider/BaiduSpider.git && python setup.py install
然后导入您的项目文件:
from baiduspider import BaiduSpider
# ...
百度蜘蛛使用简单
百度蜘蛛的使用也很简单。下面的例子打印了BaiduSpider的网页搜索的返回结果,它是网页搜索CLI的简单版本:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input()))

对于上面例子的输出
这个怎么样?是不是很简单?除了易用性,百度蜘蛛还支持自定义返回值。例如,我只想查看最常见的网络搜索结果,没有其他花里胡哨的东西。然后,我可以写:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input(), exclude=['all']))
只保留正常搜索结果输出的截图
是的,只有一个参数:exclude。这个参数很强大,有兴趣可以去文档看看。
使用百度蜘蛛制作的项目
这里我选择了两个用BaiduSpider做的开源项目,聚合搜索和标题拍拍。下面我分别介绍一下这两个项目。
聚合搜索
聚合搜索是一个聚合搜索引擎,现已接入百度、谷歌、搜狗、微信四大平台。在线演示:/GitHub:/Limourli-liu/Aggregate-search
拍
这是一个利用深度学习技术自动解决小学应用问题的入口,数据抓取部分使用了百度蜘蛛。GitHub: /jackli777/CCF-BDCI-2020-MWP-
最后
如果你喜欢百度蜘蛛这个项目,请留下你的star!您的支持对我们真的很重要~
GitHub项目地址:/BaiduSpider/BaiduSpider
文档:baiduspider.github.io/
PyPI: /project/BaiduSpider/
谢谢阅读!
网页爬虫抓取百度图片(,说真话,百度对图像辨认照常有待高的网站排行)
网站优化 • 优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-12-29 19:20
相信我们在百度上搜索东西的时候,很多搜索功能都会收录
图片,但是为什么有的网站有图片,有的网站没有图片呢?这涉及到进入百度快照时蜘蛛抓取的作用。.
信任在搜索功能中。大多数人喜欢点击带有图片的网站链接。每个人都喜欢有图片和文字的网站。而在百度的算法中,百度会更加重视有图片的文章。
那么这些图像是如何增加的呢?有几种具体的方法。
一、 百度投稿
但是由于百度的要求过于严格,目前很多网站都无法提交自己的logo。只要网址权重高、流量大、排名高,就可以手动添加logo。
二、百度蜘蛛爬行
这要看运气了。说实话,百度的图片识别在网站上还是排名靠前的,而且正好用于百度一贯网站的logo手机的开发。百度不抢词条,而是输入小图。真是无语了。
网站优化编辑之前也查了资料,为什么把图片设置成363×225,有利于百度的抓拍。连给图片添加连接的方法,小编其实都试过了,但是百度输入的八类,像往常一样输入想要它输入的图片并不容易。
三、如何输入多张图片
相信每一个站长或者公司老板都希望百度能把自己的网站变成一排图片。
百度能给网站这么高的评价,不仅是网站本身的权重和流量更好,而且这个内容一定很有价值,文章本身的TDK设置完善,文章内容也要能处理好访问者的标题,内容可以留住访问者,降低跳出率,那么百度肯定会给这篇文章一个高分。当然,严肃的一切照旧的文章应该配以图文并茂。不难看出,文章中的图片不得少于6张,否则百度也无法为您补上这一排图片。
随着百度对图片识别的合规性越来越高,相信未来百度将能够更准确的抓取网站的图片,更直观地向我们展示搜索者想要的内容,从而提高合规性的网民并更快地找到它。你想找什么。无论这对于求道者来说,照常展示无疑是非常有益的。 查看全部
网页爬虫抓取百度图片(,说真话,百度对图像辨认照常有待高的网站排行)
相信我们在百度上搜索东西的时候,很多搜索功能都会收录
图片,但是为什么有的网站有图片,有的网站没有图片呢?这涉及到进入百度快照时蜘蛛抓取的作用。.
信任在搜索功能中。大多数人喜欢点击带有图片的网站链接。每个人都喜欢有图片和文字的网站。而在百度的算法中,百度会更加重视有图片的文章。

那么这些图像是如何增加的呢?有几种具体的方法。
一、 百度投稿
但是由于百度的要求过于严格,目前很多网站都无法提交自己的logo。只要网址权重高、流量大、排名高,就可以手动添加logo。
二、百度蜘蛛爬行
这要看运气了。说实话,百度的图片识别在网站上还是排名靠前的,而且正好用于百度一贯网站的logo手机的开发。百度不抢词条,而是输入小图。真是无语了。
网站优化编辑之前也查了资料,为什么把图片设置成363×225,有利于百度的抓拍。连给图片添加连接的方法,小编其实都试过了,但是百度输入的八类,像往常一样输入想要它输入的图片并不容易。
三、如何输入多张图片
相信每一个站长或者公司老板都希望百度能把自己的网站变成一排图片。
百度能给网站这么高的评价,不仅是网站本身的权重和流量更好,而且这个内容一定很有价值,文章本身的TDK设置完善,文章内容也要能处理好访问者的标题,内容可以留住访问者,降低跳出率,那么百度肯定会给这篇文章一个高分。当然,严肃的一切照旧的文章应该配以图文并茂。不难看出,文章中的图片不得少于6张,否则百度也无法为您补上这一排图片。
随着百度对图片识别的合规性越来越高,相信未来百度将能够更准确的抓取网站的图片,更直观地向我们展示搜索者想要的内容,从而提高合规性的网民并更快地找到它。你想找什么。无论这对于求道者来说,照常展示无疑是非常有益的。
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2021-12-26 17:00
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片 查看全部
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片
网页爬虫抓取百度图片(Python入门网络爬虫之精华版()Python学习网络)
网站优化 • 优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2021-12-26 16:15
Python入门网络爬虫的精髓
Python入门网络爬虫的本质 Python学习网络爬虫主要分为爬取、分析、存储3大部分。另外,比较常用的爬虫框架Scrapy,这里最后也有详细介绍。首先,我将我总结的相关文章罗列出来。这些涵盖了网络爬虫入门所需的基本概念和技巧:宁哥的小站—网络爬虫。当我们在浏览器中输入一个 URL 并按 Enter 时,后台会发生什么?比如你打字,就会看到宁小站的首页。简单来说,这个过程发生了以下四个步骤: 找到域名对应的IP地址。向IP对应的服务器发送请求。服务器响应请求并将网页内容发回。浏览器解析网页的内容。网络爬虫要做的,简单来说就是实现浏览器的功能。通过指定url,数据直接返回给用户,无需手动操作浏览器一步步获取。这一步爬取,你想清楚获取什么内容?是HTML源代码,还是Json格式的字符串等等。1. 最基本的爬取大多数情况下是get请求,即直接从对方服务器获取数据。首先Python自带了两个模块,urllib和urllib2,基本可以满足一般的页面爬取。另外requests也是一个很有用的包,类似的还有httplib2等。要求:
data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.get(url=url, params=data) Urllib2:数据是stringimport urllib,urllib2data = urllib .urlencode(data)full_url = url+'?'+dataresponse = urllib2.urlopen(full_url) 相关参考:网易新闻排名回顾参考项目:网络爬虫最基本的爬虫:抓取网易新闻排名列表2. 处理登录情况2.1 表单登录的使用是post请求,即先将表单数据发送到服务器,服务器再将返回的cookie存储在本地。data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.post(url=url, data=data) Urllib2:
因此,当需要验证码时,可以使用带有验证码登录的cookie来解决问题。import requestsrequests_session = requests.session() response = requests_session.post(url=url_login, data=data) 如果有验证码,此时使用 response = requests_session.post(url=url_login, data=data) 是不行的,应该做如下: response_captcha = requests_session.get(url=url_login, cookies=cookies) response1 = requests.get(url_login) # 未登录 response2 = requests_session.get(url_login) # 登录了,因为我得到了响应 Cookie 之前!response3 = requests_session.get(url_results) # 登录了,因为之前拿到了Response Cookie!相关参考:网络爬虫-验证码登录参考项目:网络爬虫用户名密码和验证码登录:
这种情况下,最好的办法就是维护一个代理IP池。网上有很多免费的代理IP。好坏参差不齐,通过筛选就能找到能用的。在“频繁点击”的情况下,我们也可以通过限制爬虫访问网站的频率来避免被网站封禁。proxies = {'http':':XXXX'}请求:import requestsresponse = requests.get(url=url, proxies=proxies)Urllib2:import urllib2proxy_support = urllib2.ProxyHandler(proxies)opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)urllib2.install_opener(opener) # 安装opener,然后调用urlopen()会使用安装的opener对象 response = urllib2.urlopen ( url)3.2 时间设置的适用性:频率限制。
在这种情况下,添加 User-Agent 以指示您正在通过浏览器访问。有时还会检查你是否带了Referer信息,检查你的Referer是否合法,一般会添加Referer。headers = {'User-Agent':'XXXXX'} # 伪装成浏览器访问,适用于拒绝抓取的网站 headers = {'Referer':'XXXXX'} headers = {'User-Agent':'XXXXX' , 'Referer':'XXXXX'}Requests: response = requests.get(url=url, headers=headers)Urllib2: import urllib, urllib2req = urllib2.Request(url=url, headers=headers)response = urllib 2.urlopen(req)4. 关于断开和重新连接就不多说了。def multi_session(session, *arg):retryTimes = 20 而 retryTimes>0:try:return session.post(*arg)except:print'.',
5.多进程爬取这里是基于华尔街知识的并行爬取实验对比:Python多进程爬取和Java单线程和多线程爬取相关参考:多进程和多线程的比较Python和Java之间的计算方法6. 对于Ajax请求的处理,对于“加载更多”的情况,Ajax是用来传输大量数据的。它的工作原理是:从网页的url中加载网页的源代码后,JavaScript程序就会在浏览器中执行。这些程序将加载更多内容并“填充”网页。这就是为什么如果你直接去爬取页面本身的url,你将找不到页面的实际内容。这里,如果使用谷歌浏览器分析“请求”对应的链接(方法:右键→评论元素→网络→清除,点击“加载更多”,会出现对应的GET链接,找到类型text/html,点击即可查看get参数或者复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。
它可以对浏览器进行操作,包括字符填充、鼠标点击、获取元素、页面切换等一系列操作。简而言之,Selenium 可以做浏览器可以做的一切。下面是使用selenium动态获取给定城市列表后去哪儿网票价信息的代码。参考项目:网络爬虫Selenium 使用代理登录:爬取去哪儿网站8. 验证码识别 对于有验证码的网站,我们有三种方法:使用代理和更新IP。使用cookie登录。识别码。前面已经讲过使用proxy和使用cookie登录了,再来说说验证码识别。可以使用开源的Tesseract-OCR系统下载和识别验证码图片,并将识别出的字符传送到履带系统进行模拟着陆。当然,验证码图片也可以上传到编码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。
我们可以选择将其保存在文本文件中,或者保存在 MySQL 或 MongoDB 数据库中。存储中需要注意两个问题: 如何去重网页?内容以什么形式存储?ScrapyScrapy 是一个基于 Twisted 的开源 Python 爬虫框架,业界广泛使用。相关内容请参考基于Scrapy的网络爬虫构建。同时将本文介绍的微信搜索爬取的项目代码提供给大家,作为学习的参考。参考项目:使用Scrapy或Requests递归抓取微信搜索结果
现在下载 查看全部
网页爬虫抓取百度图片(Python入门网络爬虫之精华版()Python学习网络)
Python入门网络爬虫的精髓
Python入门网络爬虫的本质 Python学习网络爬虫主要分为爬取、分析、存储3大部分。另外,比较常用的爬虫框架Scrapy,这里最后也有详细介绍。首先,我将我总结的相关文章罗列出来。这些涵盖了网络爬虫入门所需的基本概念和技巧:宁哥的小站—网络爬虫。当我们在浏览器中输入一个 URL 并按 Enter 时,后台会发生什么?比如你打字,就会看到宁小站的首页。简单来说,这个过程发生了以下四个步骤: 找到域名对应的IP地址。向IP对应的服务器发送请求。服务器响应请求并将网页内容发回。浏览器解析网页的内容。网络爬虫要做的,简单来说就是实现浏览器的功能。通过指定url,数据直接返回给用户,无需手动操作浏览器一步步获取。这一步爬取,你想清楚获取什么内容?是HTML源代码,还是Json格式的字符串等等。1. 最基本的爬取大多数情况下是get请求,即直接从对方服务器获取数据。首先Python自带了两个模块,urllib和urllib2,基本可以满足一般的页面爬取。另外requests也是一个很有用的包,类似的还有httplib2等。要求:
data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.get(url=url, params=data) Urllib2:数据是stringimport urllib,urllib2data = urllib .urlencode(data)full_url = url+'?'+dataresponse = urllib2.urlopen(full_url) 相关参考:网易新闻排名回顾参考项目:网络爬虫最基本的爬虫:抓取网易新闻排名列表2. 处理登录情况2.1 表单登录的使用是post请求,即先将表单数据发送到服务器,服务器再将返回的cookie存储在本地。data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.post(url=url, data=data) Urllib2:
因此,当需要验证码时,可以使用带有验证码登录的cookie来解决问题。import requestsrequests_session = requests.session() response = requests_session.post(url=url_login, data=data) 如果有验证码,此时使用 response = requests_session.post(url=url_login, data=data) 是不行的,应该做如下: response_captcha = requests_session.get(url=url_login, cookies=cookies) response1 = requests.get(url_login) # 未登录 response2 = requests_session.get(url_login) # 登录了,因为我得到了响应 Cookie 之前!response3 = requests_session.get(url_results) # 登录了,因为之前拿到了Response Cookie!相关参考:网络爬虫-验证码登录参考项目:网络爬虫用户名密码和验证码登录:
这种情况下,最好的办法就是维护一个代理IP池。网上有很多免费的代理IP。好坏参差不齐,通过筛选就能找到能用的。在“频繁点击”的情况下,我们也可以通过限制爬虫访问网站的频率来避免被网站封禁。proxies = {'http':':XXXX'}请求:import requestsresponse = requests.get(url=url, proxies=proxies)Urllib2:import urllib2proxy_support = urllib2.ProxyHandler(proxies)opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)urllib2.install_opener(opener) # 安装opener,然后调用urlopen()会使用安装的opener对象 response = urllib2.urlopen ( url)3.2 时间设置的适用性:频率限制。
在这种情况下,添加 User-Agent 以指示您正在通过浏览器访问。有时还会检查你是否带了Referer信息,检查你的Referer是否合法,一般会添加Referer。headers = {'User-Agent':'XXXXX'} # 伪装成浏览器访问,适用于拒绝抓取的网站 headers = {'Referer':'XXXXX'} headers = {'User-Agent':'XXXXX' , 'Referer':'XXXXX'}Requests: response = requests.get(url=url, headers=headers)Urllib2: import urllib, urllib2req = urllib2.Request(url=url, headers=headers)response = urllib 2.urlopen(req)4. 关于断开和重新连接就不多说了。def multi_session(session, *arg):retryTimes = 20 而 retryTimes>0:try:return session.post(*arg)except:print'.',
5.多进程爬取这里是基于华尔街知识的并行爬取实验对比:Python多进程爬取和Java单线程和多线程爬取相关参考:多进程和多线程的比较Python和Java之间的计算方法6. 对于Ajax请求的处理,对于“加载更多”的情况,Ajax是用来传输大量数据的。它的工作原理是:从网页的url中加载网页的源代码后,JavaScript程序就会在浏览器中执行。这些程序将加载更多内容并“填充”网页。这就是为什么如果你直接去爬取页面本身的url,你将找不到页面的实际内容。这里,如果使用谷歌浏览器分析“请求”对应的链接(方法:右键→评论元素→网络→清除,点击“加载更多”,会出现对应的GET链接,找到类型text/html,点击即可查看get参数或者复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。
它可以对浏览器进行操作,包括字符填充、鼠标点击、获取元素、页面切换等一系列操作。简而言之,Selenium 可以做浏览器可以做的一切。下面是使用selenium动态获取给定城市列表后去哪儿网票价信息的代码。参考项目:网络爬虫Selenium 使用代理登录:爬取去哪儿网站8. 验证码识别 对于有验证码的网站,我们有三种方法:使用代理和更新IP。使用cookie登录。识别码。前面已经讲过使用proxy和使用cookie登录了,再来说说验证码识别。可以使用开源的Tesseract-OCR系统下载和识别验证码图片,并将识别出的字符传送到履带系统进行模拟着陆。当然,验证码图片也可以上传到编码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。
我们可以选择将其保存在文本文件中,或者保存在 MySQL 或 MongoDB 数据库中。存储中需要注意两个问题: 如何去重网页?内容以什么形式存储?ScrapyScrapy 是一个基于 Twisted 的开源 Python 爬虫框架,业界广泛使用。相关内容请参考基于Scrapy的网络爬虫构建。同时将本文介绍的微信搜索爬取的项目代码提供给大家,作为学习的参考。参考项目:使用Scrapy或Requests递归抓取微信搜索结果
现在下载
网页爬虫抓取百度图片( 利用Python第三方库请求库requests和解析库lxml等工具)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-12-26 16:14
利用Python第三方库请求库requests和解析库lxml等工具)
从爬虫小程序爬取百度贴吧图片
使用Python第三方库请求库请求和解析库lxml等工具抓取百度贴吧名下的所有图片:
要求如下:
1、。编程范式------面向对象
2、 采取简单的反爬措施:比如请求时间不要太频繁,请求头中的User-Agent应该隐藏爬虫工具,随机生成User-Agent,避免反爬
3、只抓取楼主发的图片,其他图片不允许抓取
代码如下:
import requests
from lxml import etree
import os
import time
from fake_useragent import UserAgent
import warnings
import random
warnings.filterwarnings('ignore')
class BaiduSpider(object):
def __init__(self, keyword, page_number):
self.url = 'http://tieba.baidu.com/'
self.useragent = UserAgent()
self.headers = {'User-Agent': self.useragent.random}
self.keyword = keyword
self.page_number = page_number
# 获取帖子链接
def get_tlink(self, data):
res = requests.get(self.url, headers=self.headers, params=data)
res.encoding = 'utf-8'
html = res.text
html = html.replace(r"", '')
# print(html)
parse_html = etree.HTML(html)
t_list = parse_html.xpath(
'//ul[@id="thread_list"]/li[@class=" j_thread_list clearfix"]/div//a/@href')
# print(t_list)
for t in t_list:
# 拼接每个帖子的链接
t_link = 'http://tieba.baidu.com' + t
# 向帖子链接发请求,获取图片链接,向图片链接发请求,保存图片到本地
# print(t_link)
self.get_ilink(t_link)
# 提取图片链接
def get_ilink(self, t_link):
res = requests.get(t_link, headers=self.headers)
res.encoding = 'utf-8'
html = res.text
parse_html = etree.HTML(html)
i_list = parse_html.xpath(
'//div[@class="d_post_content_main d_post_content_firstfloor"]//div[@class="d_post_content j_d_post_content clearfix"]/img[@class="BDE_Image"]/@src')
print(i_list)
for i in i_list:
html = requests.get(i, heasers=self.headers).content
self.write_image(html, i)
# 保存图片
def write_image(self, html, i):
filename = './' + self.keyword + '/' + i[-10:]
with open(filename, 'wb') as f:
f.write(html)
def main(self):
if os.path.exists(self.keyword):
os.remove(self.keyword)
for i in range(1, self.page_number + 1):
data = {
'kw': self.keyword,
'pn': str((i - 1) * 50)
}
self.get_tlink(data)
print('第%d页下载完毕' % i)
time.sleep(random.randint(1, 10))
if __name__ == "__main__":
spider = BaiduSpider('高考吧', 1)
spider.main()
posted @ 2019-06-26 19:39 阅读年轻(327)评论(0)编辑 查看全部
网页爬虫抓取百度图片(
利用Python第三方库请求库requests和解析库lxml等工具)
从爬虫小程序爬取百度贴吧图片
使用Python第三方库请求库请求和解析库lxml等工具抓取百度贴吧名下的所有图片:
要求如下:
1、。编程范式------面向对象
2、 采取简单的反爬措施:比如请求时间不要太频繁,请求头中的User-Agent应该隐藏爬虫工具,随机生成User-Agent,避免反爬
3、只抓取楼主发的图片,其他图片不允许抓取
代码如下:
import requests
from lxml import etree
import os
import time
from fake_useragent import UserAgent
import warnings
import random
warnings.filterwarnings('ignore')
class BaiduSpider(object):
def __init__(self, keyword, page_number):
self.url = 'http://tieba.baidu.com/'
self.useragent = UserAgent()
self.headers = {'User-Agent': self.useragent.random}
self.keyword = keyword
self.page_number = page_number
# 获取帖子链接
def get_tlink(self, data):
res = requests.get(self.url, headers=self.headers, params=data)
res.encoding = 'utf-8'
html = res.text
html = html.replace(r"", '')
# print(html)
parse_html = etree.HTML(html)
t_list = parse_html.xpath(
'//ul[@id="thread_list"]/li[@class=" j_thread_list clearfix"]/div//a/@href')
# print(t_list)
for t in t_list:
# 拼接每个帖子的链接
t_link = 'http://tieba.baidu.com' + t
# 向帖子链接发请求,获取图片链接,向图片链接发请求,保存图片到本地
# print(t_link)
self.get_ilink(t_link)
# 提取图片链接
def get_ilink(self, t_link):
res = requests.get(t_link, headers=self.headers)
res.encoding = 'utf-8'
html = res.text
parse_html = etree.HTML(html)
i_list = parse_html.xpath(
'//div[@class="d_post_content_main d_post_content_firstfloor"]//div[@class="d_post_content j_d_post_content clearfix"]/img[@class="BDE_Image"]/@src')
print(i_list)
for i in i_list:
html = requests.get(i, heasers=self.headers).content
self.write_image(html, i)
# 保存图片
def write_image(self, html, i):
filename = './' + self.keyword + '/' + i[-10:]
with open(filename, 'wb') as f:
f.write(html)
def main(self):
if os.path.exists(self.keyword):
os.remove(self.keyword)
for i in range(1, self.page_number + 1):
data = {
'kw': self.keyword,
'pn': str((i - 1) * 50)
}
self.get_tlink(data)
print('第%d页下载完毕' % i)
time.sleep(random.randint(1, 10))
if __name__ == "__main__":
spider = BaiduSpider('高考吧', 1)
spider.main()
posted @ 2019-06-26 19:39 阅读年轻(327)评论(0)编辑
网页爬虫抓取百度图片(什么是爬虫网络爬虫(一)_百度百科_光明网)
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2021-12-25 10:15
什么是爬虫
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。其他不太常用的名称包括蚂蚁、自动索引、模拟器或蠕虫。(来源:百度百科)
爬虫协议
机器人协议(也称为爬虫协议、机器人协议等)代表“机器人排除协议”(Robots Exclusion Protocol)。该网站使用Robots协议来告诉搜索引擎哪些页面可以被抓取,哪些页面不能被抓取。
robots.txt 文件是一个文本文件。您可以使用任何常用的文本编辑器(例如 Windows 附带的记事本)来创建和编辑它。robots.txt 是一个协议,而不是一个命令。robots.txt 是搜索引擎访问网站时要查看的第一个文件。robots.txt 文件告诉蜘蛛可以在服务器上查看哪些文件。(来源:百度百科)
爬虫百度图片
目标:抓取百度的图片并保存在电脑上。它们可以被抓取吗?
首先,数据是否公开?可以下载吗?
从图中可以看出,百度的图片是完全可以下载的,也就是说可以先抓取图片来抓取图片
首先要明白什么是图片?我们看到,有形式的事物是图片、照片、拓片等的统称。图片是技术绘图中的基本术语。它是指用点、线、符号、字符和数字来描述事物的几何特征、形状、位置和大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。
那么需要的图片在哪里呢?图片保存在云服务器的数据库中
每张图片都有一个对应的网址。通过requests模块发起请求,文件保存在wb+方法中。进口请求
r = requests.get('#39;)
with open('demo.jpg','wb+') as f:
f.write(r.content) 批量爬取,但是谁写代码为了爬取一张图片,还是直接下载比较好。爬虫的目的是为了达到批量下载的目的,这是真实爬虫网站的分析
首先了解jsonJSON(JavaScript Object Notation,JS Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会开发的 js 规范)的一个子集,并使用完全独立于编程语言的文本格式来存储和表示数据。简洁明了的层次结构使 JSON 成为一种理想的数据交换语言。
json是js的对象,用来访问数据的JSON字符串{
"名称": "毛利人",
“年龄”:18,
《特征》:[‘高’、‘富’、‘帅’]
}Python字典{
'name':'毛利人',
“年龄”:18
'特征':['高','富','帅']
但是在python中不能直接通过key-value对获取值,所以不得不说python中的字典在python中导入json,通过json.loads(s) --> 将json数据转换成python数据(字典) ajax 的使用 Ajax,或“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种用于创建交互式 Web 应用程序的 Web 开发技术。
图片是通过ajax方法加载的,也就是我下拉的时候,图片会自动加载,因为网站自动发起请求,分析图片url链接的位置,找到ajax请求对应的url来构造ajax url请求,json转成字典,通过字典的键值对获取value,获取图片对应的url导入请求
导入json
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
r = requests.get('%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=% E5 %9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=',headers = headers).text
res = json.loads(r)['数据']
对于索引,我在 enumerate(res) 中:
url = i['hoverURL']
打印(网址)
with open('{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content) 构造json的url,不断爬取图片。一个json里面有30张图片,所以当我们发起一个json请求的时候,可以抓取30张图片,但是还是不够。
首先分析不同json%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=发起的请求%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&55=
%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7 % 89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=
其实可以发现,再次发起请求的时候,关键是pn在不断变化
最后封装一下代码,一个list定义生产者存储连续生成的图片url,另一个list定义consumer存储图片# -*- coding: utf-8 -*-
# 时间:2019/6/20 17:07
#作者:毛利
进口请求
导入json
导入操作系统
def get_pic_url(num):
pic_url= []
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
对于范围内的我(数量):
page_url ='%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B% BE %E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&90='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['数据']
如果资源:
打印(资源)
对于 res 中的 j:
尝试:
url = j['hoverURL']
pic_url.append(url)
除了:
print('图片的url不存在')
打印(len(pic_url))
返回 pic_url
def down_img(num):
pic_url =get_pic_url(num)
如果 os.path.exists('D:\picture'):
经过
别的:
os.makedirs('D:\图片')
路径='D:\图片\\'
对于索引,我在枚举(pic_url)中:
文件名 = 路径 + str(index) +'.jpg'
打印(文件名)
with open(filename,'wb+') as f:
f.write(requests.get(i).content)
如果 __name__ =='__main__':
num = int(input('抓取多张图片:一次30张图片'))
down_img(数量)
爬行过程
抓取结果
该文章最初发表于: 查看全部
网页爬虫抓取百度图片(什么是爬虫网络爬虫(一)_百度百科_光明网)
什么是爬虫
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。其他不太常用的名称包括蚂蚁、自动索引、模拟器或蠕虫。(来源:百度百科)
爬虫协议
机器人协议(也称为爬虫协议、机器人协议等)代表“机器人排除协议”(Robots Exclusion Protocol)。该网站使用Robots协议来告诉搜索引擎哪些页面可以被抓取,哪些页面不能被抓取。
robots.txt 文件是一个文本文件。您可以使用任何常用的文本编辑器(例如 Windows 附带的记事本)来创建和编辑它。robots.txt 是一个协议,而不是一个命令。robots.txt 是搜索引擎访问网站时要查看的第一个文件。robots.txt 文件告诉蜘蛛可以在服务器上查看哪些文件。(来源:百度百科)
爬虫百度图片
目标:抓取百度的图片并保存在电脑上。它们可以被抓取吗?
首先,数据是否公开?可以下载吗?
从图中可以看出,百度的图片是完全可以下载的,也就是说可以先抓取图片来抓取图片
首先要明白什么是图片?我们看到,有形式的事物是图片、照片、拓片等的统称。图片是技术绘图中的基本术语。它是指用点、线、符号、字符和数字来描述事物的几何特征、形状、位置和大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。
那么需要的图片在哪里呢?图片保存在云服务器的数据库中
每张图片都有一个对应的网址。通过requests模块发起请求,文件保存在wb+方法中。进口请求
r = requests.get('#39;)
with open('demo.jpg','wb+') as f:
f.write(r.content) 批量爬取,但是谁写代码为了爬取一张图片,还是直接下载比较好。爬虫的目的是为了达到批量下载的目的,这是真实爬虫网站的分析
首先了解jsonJSON(JavaScript Object Notation,JS Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会开发的 js 规范)的一个子集,并使用完全独立于编程语言的文本格式来存储和表示数据。简洁明了的层次结构使 JSON 成为一种理想的数据交换语言。
json是js的对象,用来访问数据的JSON字符串{
"名称": "毛利人",
“年龄”:18,
《特征》:[‘高’、‘富’、‘帅’]
}Python字典{
'name':'毛利人',
“年龄”:18
'特征':['高','富','帅']
但是在python中不能直接通过key-value对获取值,所以不得不说python中的字典在python中导入json,通过json.loads(s) --> 将json数据转换成python数据(字典) ajax 的使用 Ajax,或“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种用于创建交互式 Web 应用程序的 Web 开发技术。
图片是通过ajax方法加载的,也就是我下拉的时候,图片会自动加载,因为网站自动发起请求,分析图片url链接的位置,找到ajax请求对应的url来构造ajax url请求,json转成字典,通过字典的键值对获取value,获取图片对应的url导入请求
导入json
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
r = requests.get('%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=% E5 %9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=',headers = headers).text
res = json.loads(r)['数据']
对于索引,我在 enumerate(res) 中:
url = i['hoverURL']
打印(网址)
with open('{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content) 构造json的url,不断爬取图片。一个json里面有30张图片,所以当我们发起一个json请求的时候,可以抓取30张图片,但是还是不够。
首先分析不同json%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=发起的请求%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&55=
%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7 % 89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=
其实可以发现,再次发起请求的时候,关键是pn在不断变化
最后封装一下代码,一个list定义生产者存储连续生成的图片url,另一个list定义consumer存储图片# -*- coding: utf-8 -*-
# 时间:2019/6/20 17:07
#作者:毛利
进口请求
导入json
导入操作系统
def get_pic_url(num):
pic_url= []
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
对于范围内的我(数量):
page_url ='%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B% BE %E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&90='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['数据']
如果资源:
打印(资源)
对于 res 中的 j:
尝试:
url = j['hoverURL']
pic_url.append(url)
除了:
print('图片的url不存在')
打印(len(pic_url))
返回 pic_url
def down_img(num):
pic_url =get_pic_url(num)
如果 os.path.exists('D:\picture'):
经过
别的:
os.makedirs('D:\图片')
路径='D:\图片\\'
对于索引,我在枚举(pic_url)中:
文件名 = 路径 + str(index) +'.jpg'
打印(文件名)
with open(filename,'wb+') as f:
f.write(requests.get(i).content)
如果 __name__ =='__main__':
num = int(input('抓取多张图片:一次30张图片'))
down_img(数量)
爬行过程
抓取结果
该文章最初发表于:
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2021-12-25 10:12
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片 查看全部
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片
网页爬虫抓取百度图片( 谷歌浏览器的查找功能发现图片的链接保存在页面源代码中)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2021-12-25 10:09
谷歌浏览器的查找功能发现图片的链接保存在页面源代码中)
Python爬虫之四(百度图片爬取)
我们在观察百度图片的时候,发现他的图片好像没完没了,一直可以下拉。然后我们观察他的网页,发现刷新和下拉开始的时候源代码不一样,增加了一些内容。通过谷歌浏览器的搜索功能找到的图片链接保存在这些新添加的代码中。这是异步加载。需要的内容不是直接在页面源码中,而是一次又一次的加载。
1、查看网络->下拉加载更多图片,发现加载文件很多,选择XRL文件,每三十张图片加载一个XRL文件。
2、选择Headers看到一个Request URL链接,可以用浏览器打开,就是加载的XRL文件的内容,但是比较乱,不方便观察(也可以点击Response,就是他的内容,和用浏览器打开是一样的)。您也可以单击它旁边的 Preivew。这个界面是一个XRL文件,但是已经像网页的源代码一样进行了整理,更容易观察。点击后可以观察内容,链接很多。
如下图,一共有30个,每个都收录
一张图片,然后我们需要找到它们的链接。
看了很多别人的博客,知道页面上有四种图片链接,middleURL、hoverURL、thumbURL、objURL。其中objURL(不是ObjURL)是原图,我们也下载了这个。
那么就该写代码了,只需要说两件事:
1、params,观察每个XRL文件的Query String Parameters,你会发现它和XRL链接是一样的,而且每个都有几个不同的字段,然后你可以发现pn是第一页* 30,gsm是pn十六进制数。我不知道最后一串数字是什么,但似乎没有关系,所以我构造了一个函数来获取图像链接资源。
2、找到objURL链接。有了XRL文件,可以直接用正则表达式匹配:'objURL":"(.*?)",'。然后我们发现是乱码,但是其他的链接是可以下载的。我试过thumbURL,然后下载也很好,正常,但是为什么objURL会这样呢?
objURL:"ippr_z2C$qAzdH3FAzdH3Ft_z&e3B8080nv1g_z&e3Bv54AzdH3FduigehAzdH3FYWxqwGBuAzdH3Fv4fnAzdH3F1xskerTk54vg3B&
因为他是加密的(不明白为什么其他博客好像没有这个问题,可能以前没有),看到一个博客解析百度objURL
然后下面是所有的代码
参考了几篇博客,比我的详细(我太懒了)
1
2
3
4
一些反爬虫问题
关于标头(UA、referer、cookies)
爬虫实战7-对抗爬虫的对策
关于反爬行动物的一些结论
之前爬取的图片无法下载,一直403禁止访问,只是因为没有添加referer
'推荐人':'#39; 查看全部
网页爬虫抓取百度图片(
谷歌浏览器的查找功能发现图片的链接保存在页面源代码中)
Python爬虫之四(百度图片爬取)
我们在观察百度图片的时候,发现他的图片好像没完没了,一直可以下拉。然后我们观察他的网页,发现刷新和下拉开始的时候源代码不一样,增加了一些内容。通过谷歌浏览器的搜索功能找到的图片链接保存在这些新添加的代码中。这是异步加载。需要的内容不是直接在页面源码中,而是一次又一次的加载。
1、查看网络->下拉加载更多图片,发现加载文件很多,选择XRL文件,每三十张图片加载一个XRL文件。
2、选择Headers看到一个Request URL链接,可以用浏览器打开,就是加载的XRL文件的内容,但是比较乱,不方便观察(也可以点击Response,就是他的内容,和用浏览器打开是一样的)。您也可以单击它旁边的 Preivew。这个界面是一个XRL文件,但是已经像网页的源代码一样进行了整理,更容易观察。点击后可以观察内容,链接很多。

如下图,一共有30个,每个都收录
一张图片,然后我们需要找到它们的链接。

看了很多别人的博客,知道页面上有四种图片链接,middleURL、hoverURL、thumbURL、objURL。其中objURL(不是ObjURL)是原图,我们也下载了这个。
那么就该写代码了,只需要说两件事:
1、params,观察每个XRL文件的Query String Parameters,你会发现它和XRL链接是一样的,而且每个都有几个不同的字段,然后你可以发现pn是第一页* 30,gsm是pn十六进制数。我不知道最后一串数字是什么,但似乎没有关系,所以我构造了一个函数来获取图像链接资源。

2、找到objURL链接。有了XRL文件,可以直接用正则表达式匹配:'objURL":"(.*?)",'。然后我们发现是乱码,但是其他的链接是可以下载的。我试过thumbURL,然后下载也很好,正常,但是为什么objURL会这样呢?
objURL:"ippr_z2C$qAzdH3FAzdH3Ft_z&e3B8080nv1g_z&e3Bv54AzdH3FduigehAzdH3FYWxqwGBuAzdH3Fv4fnAzdH3F1xskerTk54vg3B&
因为他是加密的(不明白为什么其他博客好像没有这个问题,可能以前没有),看到一个博客解析百度objURL
然后下面是所有的代码
参考了几篇博客,比我的详细(我太懒了)
1
2
3
4
一些反爬虫问题
关于标头(UA、referer、cookies)
爬虫实战7-对抗爬虫的对策
关于反爬行动物的一些结论
之前爬取的图片无法下载,一直403禁止访问,只是因为没有添加referer
'推荐人':'#39;
网页爬虫抓取百度图片( 搜索引擎爬虫着陆页质量检测爬虫百度爬虫算法优秀)
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2021-12-25 07:14
搜索引擎爬虫着陆页质量检测爬虫百度爬虫算法优秀)
什么是搜索引擎爬虫?
搜索引擎爬虫又称网络蜘蛛、网络机器人,英文名称:Spider,是一种按照一定的规则自动抓取万维网上信息的程序或脚本。
爬虫爬取过程:
首先,从互联网页面中选择一些页面,将这些页面链接地址作为种子URL,将这些种子URL放入URL队列中进行爬取。爬虫依次从待爬取的URL队列中读取,通过DNS解析URL。将链接地址转换为网站服务器对应的IP地址。给它和网页的相对路径名给网页下载器,网页下载器负责下载页面的内容。下载到本地页面,一方面存储在页面库中,等待索引等待后续处理;另一方面,将下载页面的URL放入已爬取的URL队列,记录爬虫系统已经下载过的网页URL,避免重复抓取网页。对于新下载的网页,提取其中收录的所有链接信息,并在抓取的URL队列中进行检查。如果发现该链接没有被抓取,则将该URL放在待抓取的URL队列的末尾,然后在抓取调度中下载该URL对应的网页。这样就形成了一个循环,直到对待爬取的URL队列进行审核,这意味着爬虫系统已经爬取了所有可以爬取的网页,此时完成了一轮完整的爬取过程。
常见爬虫:
谷歌爬虫
算法优秀,反应快,对内容质量的把握极佳,爬虫程序中等强度,服务器负担小,推广效果好。
对应的user-agent:爬虫名称
Googlebot:谷歌网络爬虫
Googlebot-news:谷歌新闻抓取工具
Googlebot-image:谷歌图片抓取工具
Googlebot-video:谷歌视频抓取工具
Googlebot-mobile:谷歌移动爬虫
Mediapartners-google 或 Mediapartners(googlebot):谷歌广告爬虫
Adsbot-google:Google 着陆页质量检查爬虫
百度爬虫
算法好,响应速度慢,内容质量一般,高强度爬虫程序,由于算法优化不好,服务器负担大,本身存在很多小问题,隐私保护穷,在百度面前毫无隐私可言。推广效果不错。
对应的user-agent:爬虫名称
百度蜘蛛:百度网络爬虫和移动爬虫
baiduspider-image:百度图片爬虫
百度蜘蛛视频:百度视频爬虫
百度蜘蛛新闻:百度新闻爬虫
百度蜘蛛最爱:百度手藏爬虫
百度蜘蛛-cpro:百度联盟爬虫
百度蜘蛛-广告:百度业务爬虫
不错的搜索爬虫
对应的user-agent:爬虫名称
360spider 或 haosouspider:不错的搜索网络爬虫和移动爬虫
360spider-image:不错的搜索图片爬虫
360spider-video:好搜视频爬虫
搜狗爬虫
算法不好,响应速度极慢,无法很好把握内容质量。高强度的爬虫程序会因为算法的奇数错误而对页面进行大量重复且无意义的扫描。整体性价比非常低。
对应的user-agent:爬虫名称
搜狗蜘蛛:搜狗综合爬虫
新浪爱问爬虫
对应的user-agent:爬虫名称
Iaskspider:新浪爱问爬虫
有道爬虫
对应的user-agent:爬虫名称
YodaoBot:网易有道爬虫
Alexa爬虫
对应的user-agent:爬虫名称
ia_archiver:Alexa 爬虫
雅虎爬行动物
对应的user-agent:爬虫名称
雅虎!Slurp:雅虎爬虫
必应爬虫
对应的user-agent:爬虫名称
Bingbot:必应爬虫
网站建筑是如何吸引蜘蛛抓取网站的内容的?
1、网站和页面的权重仍然作为衡量网站价值的重要标准。优质老手网站被百度评为高权重。这种网站页面被蜘蛛爬取的概率比较高,所以很多内部页面都会收录。
2、 页面更新的频率会直接影响蜘蛛的访问频率。蜘蛛每次访问服务器时都会保存获取的页面数据。如果页面内容与下次存储的数据相同,蜘蛛会认为该页面不会频繁更新,然后优先网站来决定以后访问的时间和频率。如果网站的内容更新频繁,而蜘蛛每次抓取的内容都不一样,那么蜘蛛会更频繁地访问这类页面,页面上出现的新链接自然会被抓取< @收录。
3、 引导链接的建立,无论网站的外链还是内链,想要被蜘蛛抓取,都必须有引导链接才能进入页面。因此,内部链接的合理建立非常重要,否则蜘蛛无法发现页面的存在。导入高质量的外链也很重要,会增加蜘蛛跟踪爬行的深度。
4、 建立首页的引导链接。蜘蛛最常访问的是主页。有内容更新时,一定要反映在首页,建立链接,方便蜘蛛最快抓取,增加抓取机会。
5、原创 内容,蜘蛛最厉害的就是将新发布的内容与服务器收录的数据进行对比,如果是抄袭或部分修改,则不是原创伪原创的内容,百度不会收录,如果频繁发布非原创的内容,那么也会减少蜘蛛访问的频率,严重的不直接收录@ > , 偶数 0收录。
网站 对蜘蛛不友好的因素:
1、robots.txt 文件、2、nofollow 标签、3、flash、4、 图片、5、JavaScript、6、网站 导览权限,
7、强制使用cookies,8、HTTP返回码,9、服务器,10、域名解析,11、网站完整程序, 12、动态网址,
13、帧结构,14、会话id 查看全部
网页爬虫抓取百度图片(
搜索引擎爬虫着陆页质量检测爬虫百度爬虫算法优秀)
什么是搜索引擎爬虫?
搜索引擎爬虫又称网络蜘蛛、网络机器人,英文名称:Spider,是一种按照一定的规则自动抓取万维网上信息的程序或脚本。
爬虫爬取过程:
首先,从互联网页面中选择一些页面,将这些页面链接地址作为种子URL,将这些种子URL放入URL队列中进行爬取。爬虫依次从待爬取的URL队列中读取,通过DNS解析URL。将链接地址转换为网站服务器对应的IP地址。给它和网页的相对路径名给网页下载器,网页下载器负责下载页面的内容。下载到本地页面,一方面存储在页面库中,等待索引等待后续处理;另一方面,将下载页面的URL放入已爬取的URL队列,记录爬虫系统已经下载过的网页URL,避免重复抓取网页。对于新下载的网页,提取其中收录的所有链接信息,并在抓取的URL队列中进行检查。如果发现该链接没有被抓取,则将该URL放在待抓取的URL队列的末尾,然后在抓取调度中下载该URL对应的网页。这样就形成了一个循环,直到对待爬取的URL队列进行审核,这意味着爬虫系统已经爬取了所有可以爬取的网页,此时完成了一轮完整的爬取过程。
常见爬虫:
谷歌爬虫
算法优秀,反应快,对内容质量的把握极佳,爬虫程序中等强度,服务器负担小,推广效果好。
对应的user-agent:爬虫名称
Googlebot:谷歌网络爬虫
Googlebot-news:谷歌新闻抓取工具
Googlebot-image:谷歌图片抓取工具
Googlebot-video:谷歌视频抓取工具
Googlebot-mobile:谷歌移动爬虫
Mediapartners-google 或 Mediapartners(googlebot):谷歌广告爬虫
Adsbot-google:Google 着陆页质量检查爬虫
百度爬虫
算法好,响应速度慢,内容质量一般,高强度爬虫程序,由于算法优化不好,服务器负担大,本身存在很多小问题,隐私保护穷,在百度面前毫无隐私可言。推广效果不错。
对应的user-agent:爬虫名称
百度蜘蛛:百度网络爬虫和移动爬虫
baiduspider-image:百度图片爬虫
百度蜘蛛视频:百度视频爬虫
百度蜘蛛新闻:百度新闻爬虫
百度蜘蛛最爱:百度手藏爬虫
百度蜘蛛-cpro:百度联盟爬虫
百度蜘蛛-广告:百度业务爬虫
不错的搜索爬虫
对应的user-agent:爬虫名称
360spider 或 haosouspider:不错的搜索网络爬虫和移动爬虫
360spider-image:不错的搜索图片爬虫
360spider-video:好搜视频爬虫
搜狗爬虫
算法不好,响应速度极慢,无法很好把握内容质量。高强度的爬虫程序会因为算法的奇数错误而对页面进行大量重复且无意义的扫描。整体性价比非常低。
对应的user-agent:爬虫名称
搜狗蜘蛛:搜狗综合爬虫
新浪爱问爬虫
对应的user-agent:爬虫名称
Iaskspider:新浪爱问爬虫
有道爬虫
对应的user-agent:爬虫名称
YodaoBot:网易有道爬虫
Alexa爬虫
对应的user-agent:爬虫名称
ia_archiver:Alexa 爬虫
雅虎爬行动物
对应的user-agent:爬虫名称
雅虎!Slurp:雅虎爬虫
必应爬虫
对应的user-agent:爬虫名称
Bingbot:必应爬虫
网站建筑是如何吸引蜘蛛抓取网站的内容的?
1、网站和页面的权重仍然作为衡量网站价值的重要标准。优质老手网站被百度评为高权重。这种网站页面被蜘蛛爬取的概率比较高,所以很多内部页面都会收录。
2、 页面更新的频率会直接影响蜘蛛的访问频率。蜘蛛每次访问服务器时都会保存获取的页面数据。如果页面内容与下次存储的数据相同,蜘蛛会认为该页面不会频繁更新,然后优先网站来决定以后访问的时间和频率。如果网站的内容更新频繁,而蜘蛛每次抓取的内容都不一样,那么蜘蛛会更频繁地访问这类页面,页面上出现的新链接自然会被抓取< @收录。
3、 引导链接的建立,无论网站的外链还是内链,想要被蜘蛛抓取,都必须有引导链接才能进入页面。因此,内部链接的合理建立非常重要,否则蜘蛛无法发现页面的存在。导入高质量的外链也很重要,会增加蜘蛛跟踪爬行的深度。
4、 建立首页的引导链接。蜘蛛最常访问的是主页。有内容更新时,一定要反映在首页,建立链接,方便蜘蛛最快抓取,增加抓取机会。
5、原创 内容,蜘蛛最厉害的就是将新发布的内容与服务器收录的数据进行对比,如果是抄袭或部分修改,则不是原创伪原创的内容,百度不会收录,如果频繁发布非原创的内容,那么也会减少蜘蛛访问的频率,严重的不直接收录@ > , 偶数 0收录。
网站 对蜘蛛不友好的因素:
1、robots.txt 文件、2、nofollow 标签、3、flash、4、 图片、5、JavaScript、6、网站 导览权限,
7、强制使用cookies,8、HTTP返回码,9、服务器,10、域名解析,11、网站完整程序, 12、动态网址,
13、帧结构,14、会话id
网页爬虫抓取百度图片( 老鱼网15小时前是百度爬虫页面自动繁殖泛目录程序)
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-12-24 15:05
老鱼网15小时前是百度爬虫页面自动繁殖泛目录程序)
百度爬虫页面自动SEO培育程序源码+教程
老鱼网15小时前
这是一个自动复制百度爬虫页面的泛目录程序。有视频教程
1、 只需采集关键词,无需更新任何文章,内容
2、 页面自动复制,自动SEO优化
3、 asp脚本伪静态无限生成
4、自动获取百度的关键词结果和标题
5、 根据关键词自动抓取百度搜索结果页的标题+摘要
6、 内链随机插入页面,站点地图随机调用300
7、 只需要旧域名,无灰历史,站点历史
8、 页面可读性强,搜狗效果更好,流量来得更快
百度爬虫页面自动SEO育种程序源码+教程下载:免费下载声明:禁止商业用途,仅供学习研究,商业使用风险自负!免费下载
上一篇:DediPath 在洛杉矶、圣何塞、西雅图和纽约的 VPS 主机上圣诞大减价 50%
下一篇:帝国cms仿玩网大型游戏资讯门户网站源码
转载声明:本站提供的资源均来自互联网,版权纠纷与本站无关。所有内容和软件文章仅用于学习和研究目的。以上内容不得用于商业或非法用途。否则,一切后果由用户负责。我们不保证内容的长期可用性。使用本网站内容所带来的风险与本网站无关。您必须在下载后 24 小时。在一个小时内,从您的电脑/手机中彻底删除上述内容。如果您喜欢本程序,请支持正版软件,购买并注册,获得更好的正版服务。请写信给E-mail:wwwlaoyuwang#(#=@) 查看全部
网页爬虫抓取百度图片(
老鱼网15小时前是百度爬虫页面自动繁殖泛目录程序)
百度爬虫页面自动SEO培育程序源码+教程
老鱼网15小时前
这是一个自动复制百度爬虫页面的泛目录程序。有视频教程
1、 只需采集关键词,无需更新任何文章,内容
2、 页面自动复制,自动SEO优化
3、 asp脚本伪静态无限生成
4、自动获取百度的关键词结果和标题
5、 根据关键词自动抓取百度搜索结果页的标题+摘要
6、 内链随机插入页面,站点地图随机调用300
7、 只需要旧域名,无灰历史,站点历史
8、 页面可读性强,搜狗效果更好,流量来得更快
百度爬虫页面自动SEO育种程序源码+教程下载:免费下载声明:禁止商业用途,仅供学习研究,商业使用风险自负!免费下载
上一篇:DediPath 在洛杉矶、圣何塞、西雅图和纽约的 VPS 主机上圣诞大减价 50%
下一篇:帝国cms仿玩网大型游戏资讯门户网站源码
转载声明:本站提供的资源均来自互联网,版权纠纷与本站无关。所有内容和软件文章仅用于学习和研究目的。以上内容不得用于商业或非法用途。否则,一切后果由用户负责。我们不保证内容的长期可用性。使用本网站内容所带来的风险与本网站无关。您必须在下载后 24 小时。在一个小时内,从您的电脑/手机中彻底删除上述内容。如果您喜欢本程序,请支持正版软件,购买并注册,获得更好的正版服务。请写信给E-mail:wwwlaoyuwang#(#=@)
网页爬虫抓取百度图片(保存新浪博客的历史文章备份到电脑本地,功能很强大 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2021-12-24 15:04
)
原因
想把新浪博客文章的历史备份到本地,用Puppeteer写个爬虫试试。
之前喜欢用Python3+Selenium,但是发现Puppeteer好像很容易安装,功能也很强大。
第一次使用Puppeteer,查了一些资料。
本文参考:从无头浏览器保存图像
本教程中的方法非常丰富,但是在爬取新浪博客的过程中,文章中的很多方法都遇到了障碍,最后发现并实践了一个更好的方法。
第一次尝试:node.js 直接请求下载文件
这是我自己的想法。最简单的方法就是拿到图片src后直接请求下载到本地。
const downloadFile = async (url, filePath) => {
return axios({
method: "get",
url: url,
responseType: "stream",
}).then((response) => {
response.data.pipe(fs.createWriteStream(filePath));
});
};
复制代码
通过axios下载保存图片失败,新浪退回图片,防止盗链。原理暂时不清楚。
看来我们需要想办法绕过它。
第二次尝试:从新的 Canvas 中提取图像
Extract Image from a New Canvas,这种方法是创建一个空白的canvas元素,将目标图片写入其中,然后将图片数据提取为DataURL。
如果图像数据来自不同的来源,这将导致画布被污染,并且试图从画布中获取图像数据将导致错误。
const getDataUrlThroughCanvas = async (selector) => {
// Create a new image element with unconstrained size.
const originalImage = document.querySelector(selector);
const image = document.createElement('img');
image.src = originalImage.src;
// Create a canvas and context to draw onto.
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = image.width;
canvas.height = image.height;
// Ensure the image is loaded.
await new Promise((resolve) => {
if (image.complete || (image.width) > 0) resolve();
image.addEventListener('load', () => resolve());
});
context.drawImage(image, 0, 0);
return canvas.toDataURL();
};
复制代码
我尝试过并将其重写为批处理选择器版本。运行后,由于跨域问题出现错误:Uncaught DOMException: Failed to execute'toDataURL' on'HTMLCanvasElement': Tainted canvases may not be export 它可以通过 image.setAttribute("crossOrigin",' 解决Anonymous'),但是又报跨域错误,解决失败。
第三次尝试:调用浏览器执行fetch方法下载图片
(Re-)Fetch the Image from the Server,这种方法是将JS代码注入浏览器执行,直接在浏览器层面进行操作。
const assert = require('assert');
const getDataUrlThroughFetch = async (selector, options = {}) => {
const image = document.querySelector(selector);
const url = image.src;
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`Could not fetch image, (status ${response.status}`);
}
const data = await response.blob();
const reader = new FileReader();
return new Promise((resolve) => {
reader.addEventListener('loadend', () => resolve(reader.result));
reader.readAsDataURL(data);
});
};
try {
const options = { cache: 'no-cache' };
const dataUrl = await page.evaluate(getDataUrlThroughFetch, '#svg', options);
const { mime, buffer } = parseDataUrl(dataUrl);
assert.equal(mime, 'image/svg+xml');
fs.writeFileSync('logo-fetch.svg', buffer, 'base64');
} catch (error) {
console.log(error);
}
复制代码
这种方法的实践也产生了错误。看了控制台的提示,也是因为跨域。
应该是新浪做了跨域限制。注入的JS不是新浪的,无法正常获取新浪的图片。
第四次尝试:通过Chromium的DevTools协议获取图片
使用DevTools协议提取图片,也就是说我们访问的是Puppeteer的api控制的浏览器。原理类似于我们F12打开开发者工具界面,在Sources中找到对应下载的图片。
const assert = require('assert');
const getImageContent = async (page, url) => {
const { content, base64Encoded } = await page._client.send(
'Page.getResourceContent',
{ frameId: String(page.mainFrame()._id), url },
);
assert.equal(base64Encoded, true);
return content;
};
try {
const url = await page.evaluate(() => document.querySelect('#svg').src)
const content = await getImageContent(page, url);
const contentBuffer = Buffer.from(content, 'base64');
fs.writeFileSync('logo-extracted.svg', contentBuffer, 'base64');
} catch (e) {
console.log(e);
}
复制代码
就这样,我也跑了,第一次看到图片被一张一张的下载到本地,很是欣慰。
但是这种方法有一定几率对图片内容造成损坏,出现绿色背景。我怀疑是因为看的时候图片没有下载完整,所以又放弃了。
第五次尝试:【原创终极方案】直接通过page.waitForResponse方法获取响应
结合第四次尝试中图片加载不完整的思考,基于对Puppeteer文档的查询,找到了那个教程中没有提到的方法:page.waitForResponse。
page.waitForResponse 方法是等待一个响应结束继续执行,并返回到 Puppeteer Response 实例。
使用示例:
const firstResponse = await page.waitForResponse('https://example.com/resource');
const finalResponse = await page.waitForResponse(response => response.url() === 'https://example.com' && response.status() === 200);
return finalResponse.ok();
复制代码
因此,我们在获取到图片的url后,可以直接使用该方法在浏览器中等待图片下载加载完毕,在加载后返回的Response对象中获取图片数据,更加简单高效比上一个教程中的方法。
const imgResp = await detailPage.waitForResponse(img.real_src, {
timeout: 10000,
});
const buffer = await imgResp.buffer();
const imgBase64 = buffer.toString("base64");
fs.writeFileSync(
`data/images/${index}_${img.index}.jpg`,
imgBase64,
"base64"
);
复制代码
对我来说,这是我发现并成功实践的最终和最推荐的解决方案。
踩了这么多坑,记录下来供大家参考。
查看全部
网页爬虫抓取百度图片(保存新浪博客的历史文章备份到电脑本地,功能很强大
)
原因
想把新浪博客文章的历史备份到本地,用Puppeteer写个爬虫试试。
之前喜欢用Python3+Selenium,但是发现Puppeteer好像很容易安装,功能也很强大。
第一次使用Puppeteer,查了一些资料。
本文参考:从无头浏览器保存图像
本教程中的方法非常丰富,但是在爬取新浪博客的过程中,文章中的很多方法都遇到了障碍,最后发现并实践了一个更好的方法。
第一次尝试:node.js 直接请求下载文件
这是我自己的想法。最简单的方法就是拿到图片src后直接请求下载到本地。
const downloadFile = async (url, filePath) => {
return axios({
method: "get",
url: url,
responseType: "stream",
}).then((response) => {
response.data.pipe(fs.createWriteStream(filePath));
});
};
复制代码
通过axios下载保存图片失败,新浪退回图片,防止盗链。原理暂时不清楚。
看来我们需要想办法绕过它。
第二次尝试:从新的 Canvas 中提取图像
Extract Image from a New Canvas,这种方法是创建一个空白的canvas元素,将目标图片写入其中,然后将图片数据提取为DataURL。
如果图像数据来自不同的来源,这将导致画布被污染,并且试图从画布中获取图像数据将导致错误。
const getDataUrlThroughCanvas = async (selector) => {
// Create a new image element with unconstrained size.
const originalImage = document.querySelector(selector);
const image = document.createElement('img');
image.src = originalImage.src;
// Create a canvas and context to draw onto.
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = image.width;
canvas.height = image.height;
// Ensure the image is loaded.
await new Promise((resolve) => {
if (image.complete || (image.width) > 0) resolve();
image.addEventListener('load', () => resolve());
});
context.drawImage(image, 0, 0);
return canvas.toDataURL();
};
复制代码
我尝试过并将其重写为批处理选择器版本。运行后,由于跨域问题出现错误:Uncaught DOMException: Failed to execute'toDataURL' on'HTMLCanvasElement': Tainted canvases may not be export 它可以通过 image.setAttribute("crossOrigin",' 解决Anonymous'),但是又报跨域错误,解决失败。
第三次尝试:调用浏览器执行fetch方法下载图片
(Re-)Fetch the Image from the Server,这种方法是将JS代码注入浏览器执行,直接在浏览器层面进行操作。
const assert = require('assert');
const getDataUrlThroughFetch = async (selector, options = {}) => {
const image = document.querySelector(selector);
const url = image.src;
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`Could not fetch image, (status ${response.status}`);
}
const data = await response.blob();
const reader = new FileReader();
return new Promise((resolve) => {
reader.addEventListener('loadend', () => resolve(reader.result));
reader.readAsDataURL(data);
});
};
try {
const options = { cache: 'no-cache' };
const dataUrl = await page.evaluate(getDataUrlThroughFetch, '#svg', options);
const { mime, buffer } = parseDataUrl(dataUrl);
assert.equal(mime, 'image/svg+xml');
fs.writeFileSync('logo-fetch.svg', buffer, 'base64');
} catch (error) {
console.log(error);
}
复制代码
这种方法的实践也产生了错误。看了控制台的提示,也是因为跨域。
应该是新浪做了跨域限制。注入的JS不是新浪的,无法正常获取新浪的图片。
第四次尝试:通过Chromium的DevTools协议获取图片
使用DevTools协议提取图片,也就是说我们访问的是Puppeteer的api控制的浏览器。原理类似于我们F12打开开发者工具界面,在Sources中找到对应下载的图片。
const assert = require('assert');
const getImageContent = async (page, url) => {
const { content, base64Encoded } = await page._client.send(
'Page.getResourceContent',
{ frameId: String(page.mainFrame()._id), url },
);
assert.equal(base64Encoded, true);
return content;
};
try {
const url = await page.evaluate(() => document.querySelect('#svg').src)
const content = await getImageContent(page, url);
const contentBuffer = Buffer.from(content, 'base64');
fs.writeFileSync('logo-extracted.svg', contentBuffer, 'base64');
} catch (e) {
console.log(e);
}
复制代码
就这样,我也跑了,第一次看到图片被一张一张的下载到本地,很是欣慰。
但是这种方法有一定几率对图片内容造成损坏,出现绿色背景。我怀疑是因为看的时候图片没有下载完整,所以又放弃了。
第五次尝试:【原创终极方案】直接通过page.waitForResponse方法获取响应
结合第四次尝试中图片加载不完整的思考,基于对Puppeteer文档的查询,找到了那个教程中没有提到的方法:page.waitForResponse。
page.waitForResponse 方法是等待一个响应结束继续执行,并返回到 Puppeteer Response 实例。
使用示例:
const firstResponse = await page.waitForResponse('https://example.com/resource');
const finalResponse = await page.waitForResponse(response => response.url() === 'https://example.com' && response.status() === 200);
return finalResponse.ok();
复制代码
因此,我们在获取到图片的url后,可以直接使用该方法在浏览器中等待图片下载加载完毕,在加载后返回的Response对象中获取图片数据,更加简单高效比上一个教程中的方法。
const imgResp = await detailPage.waitForResponse(img.real_src, {
timeout: 10000,
});
const buffer = await imgResp.buffer();
const imgBase64 = buffer.toString("base64");
fs.writeFileSync(
`data/images/${index}_${img.index}.jpg`,
imgBase64,
"base64"
);
复制代码
对我来说,这是我发现并成功实践的最终和最推荐的解决方案。
踩了这么多坑,记录下来供大家参考。
网页爬虫抓取百度图片(Python主要用来做什么应用?爬虫参考)
网站优化 • 优采云 发表了文章 • 0 个评论 • 36 次浏览 • 2021-12-22 14:10
本文文章将详细讲解python爬虫如何批量抓取百度图片。小编觉得很实用,分享给大家作为参考。希望大家看完这篇文章以后可以有所收获。
Python 主要用于什么
Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开发;6、桌面应用开发。
当我们要获取百度图片的时候,每张图片都要右击下载是很麻烦的。 python爬虫可以实现批量下载,根据我们的下载网站位置、图片位置、图片下载数量、图片下载位置等要求进行批量下载。
1、导入相关库
import requests#爬虫库
import re#正则表达式库
import os#系统库
import time#时间库
2、确定百度图片链接
url='http://image.baidu.com/search/ ... 3B%23百度链接
3、解码
# 解码def decode(url):
for key, value in str_table.items():
url = url.replace(key, value)
return url.translate(char_table)
4、百度图片下拉
def buildUrls(word):
word = urllib.parse.quote(word)
url = r"http://image.baidu.com/search/ ... fp%3D
result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word={word}&face=0&istype=2nc=1&pn={pn}&rn=60"
urls = (url.format(word=word, pn=x) for x in itertools.count(start=0, step=60))
return urls
re_url = re.compile(r'"objURL":"(.*?)"')
5、使用正则表达式获取图片数量
totalnum = re.findall('(.*?)', string)
print("百度图片"+totalnum[0])img_url_regex = '"thumbURL":"(.*?)",'#正则匹配式count=0#总共下载
的图片数index=0#链接后面的序号page=0#当前搜集的页while(1):
strhtml=requests.get(url+str(index),headers=headers)#get方式获取数据
string=str(strhtml.text)
print("已爬取网页")
6、使用正则表达式查找图片url
print("第"+str(page+1)+"页共收集到"+str(len(pic_url))+"张图片")
7、创建文件路径下载
def mkDir(dirName):
dirpath = os.path.join(sys.path[0], dirName)
if not os.path.exists(dirpath):
os.mkdir(dirpath)
return dirpathif __name__ == '__main__':
with open('list.txt', 'r', encoding="utf-8") as f:
result = f.read()
keys = result.split('\n')
key_words = list(enumerate(keys, start=1))
for key in key_words:
word = key[1]
dirpath = mkDir(word)
imgType = 'jpg'
strtag = word
numIMGS = 3
urls = buildUrls(word)
index = 0
#print("= = " * 25)
for url in urls:
print("正在请求:", url)
html = requests.get(url, timeout=10).content.decode('utf-8')
imgUrls = resolveImgUrl(html)
# print(imgUrls)
if len(imgUrls) == 0: # 没有图片则结束
break
for url in imgUrls:
if downImgs(url, dirpath, strtag + ' ' + str(index + 1), imgType):
index += 1
# print("已下载 %s 张" % index)
# 双 break 跳出下载循环
if index == numIMGS:
break
if index == numIMGS:
# print('您一共下载了 %s 张图片' % index)
# print('程序正在终止')
break
关于《如何用python爬虫批量抓取百度图片》的文章文章分享到这里,希望以上内容能对大家有所帮助,让大家学到更多的知识,有感文章 @文章好的,请分享给更多人看。 查看全部
网页爬虫抓取百度图片(Python主要用来做什么应用?爬虫参考)
本文文章将详细讲解python爬虫如何批量抓取百度图片。小编觉得很实用,分享给大家作为参考。希望大家看完这篇文章以后可以有所收获。
Python 主要用于什么
Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开发;6、桌面应用开发。
当我们要获取百度图片的时候,每张图片都要右击下载是很麻烦的。 python爬虫可以实现批量下载,根据我们的下载网站位置、图片位置、图片下载数量、图片下载位置等要求进行批量下载。
1、导入相关库
import requests#爬虫库
import re#正则表达式库
import os#系统库
import time#时间库
2、确定百度图片链接
url='http://image.baidu.com/search/ ... 3B%23百度链接
3、解码
# 解码def decode(url):
for key, value in str_table.items():
url = url.replace(key, value)
return url.translate(char_table)
4、百度图片下拉
def buildUrls(word):
word = urllib.parse.quote(word)
url = r"http://image.baidu.com/search/ ... fp%3D
result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word={word}&face=0&istype=2nc=1&pn={pn}&rn=60"
urls = (url.format(word=word, pn=x) for x in itertools.count(start=0, step=60))
return urls
re_url = re.compile(r'"objURL":"(.*?)"')
5、使用正则表达式获取图片数量
totalnum = re.findall('(.*?)', string)
print("百度图片"+totalnum[0])img_url_regex = '"thumbURL":"(.*?)",'#正则匹配式count=0#总共下载
的图片数index=0#链接后面的序号page=0#当前搜集的页while(1):
strhtml=requests.get(url+str(index),headers=headers)#get方式获取数据
string=str(strhtml.text)
print("已爬取网页")
6、使用正则表达式查找图片url
print("第"+str(page+1)+"页共收集到"+str(len(pic_url))+"张图片")
7、创建文件路径下载
def mkDir(dirName):
dirpath = os.path.join(sys.path[0], dirName)
if not os.path.exists(dirpath):
os.mkdir(dirpath)
return dirpathif __name__ == '__main__':
with open('list.txt', 'r', encoding="utf-8") as f:
result = f.read()
keys = result.split('\n')
key_words = list(enumerate(keys, start=1))
for key in key_words:
word = key[1]
dirpath = mkDir(word)
imgType = 'jpg'
strtag = word
numIMGS = 3
urls = buildUrls(word)
index = 0
#print("= = " * 25)
for url in urls:
print("正在请求:", url)
html = requests.get(url, timeout=10).content.decode('utf-8')
imgUrls = resolveImgUrl(html)
# print(imgUrls)
if len(imgUrls) == 0: # 没有图片则结束
break
for url in imgUrls:
if downImgs(url, dirpath, strtag + ' ' + str(index + 1), imgType):
index += 1
# print("已下载 %s 张" % index)
# 双 break 跳出下载循环
if index == numIMGS:
break
if index == numIMGS:
# print('您一共下载了 %s 张图片' % index)
# print('程序正在终止')
break
关于《如何用python爬虫批量抓取百度图片》的文章文章分享到这里,希望以上内容能对大家有所帮助,让大家学到更多的知识,有感文章 @文章好的,请分享给更多人看。
网页爬虫抓取百度图片(百度爬虫的优化策略及优化方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2021-12-22 14:03
百度爬虫是一个自动程序。内容的爬取路径类似于蜘蛛丝。它通过网页的锚文本链接进行抓取和抓取,所以我们也被称为百度蜘蛛。它抓取网页的内容、图片和文本。等待,爬完后排序再排序,所以网站必须被蜘蛛访问过,被爬过才可以显示在搜索结果页面上。
一、百度爬虫的作用:
搜索引擎通过蜘蛛的自动程序访问各种类型的网站。爬虫首先判断网页是否满足收录的条件。如果满足条件,百度爬虫会下载网页并保存在百度数据中,创建百度快照,当用户搜索某个关键词时,快照通过自己的排序机制进行索引和排序,并然后将排序结果显示给用户。如果网页内容不符合搜索引擎的收录规则,则百度爬虫不会收录,通过链接访问其他页面,重新判断该页面是否为收录。
二、百度爬虫有以下优化策略:
1、 增加链接发现的概率
主动向百度提交新网页无疑是缩短蜘蛛发现机会的一种方式,但蜘蛛的到来并不一定保证它们会收录。取决于页面代码、内容质量、排版、标题等。 另一方面,从逻辑上讲,网站 的外部链接越多,爬虫发现和访问的概率就越大,因此可取在一些高权重的网站上留下外部链接。
2、 增加有效收录的数量和排名页面的百分比
这就需要持续高质量的内容输出,内容必须符合白皮书的要求。一方面可以增加有效收录的数量,另一方面会增加搜索的曝光率,即参与排名的词多。会不断吸引蜘蛛前来拜访。
3、网站使用专用IP地址
爬虫每天对一个IP的爬取频率是有限的。使用共享 IP 很可能会分配给您站点的 IP。此外,也可能受到其他网站的影响,比如违反网站,联合处罚等。之后,就不会再有很多爬虫要访问了。
4、注意内容更新频率
比如你网站先每天发100篇文章,爬虫来的很勤快,然后每天只发几篇文章,有时不更新,这样爬虫的频率就慢了随着时间的推移而减少,所以保持更新频率是蜘蛛稳定访问的关键之一。
5、保证网页打开速度
这一点相信大家都很清楚。所选服务器必须稳定。机房不常被攻击,线路有问题。最好有CDN加速。保证网页的打开速度是百度爬虫顺利访问的前提。如果经常出现无法打开或高延迟,蜘蛛访问的频率肯定会下降。
通过以上几点的分享,我们知道网站需要做哪些优化才能让百度爬虫受益,要注意网站页面的数量多,不代表蜘蛛的频率访问量会高,但有快照,有排名的页面越多,网站的质量越好,索引的页面越多,蜘蛛访问的频率越高。还要注意网站链接层次结构的合理性。关卡过多不利于蜘蛛爬行。 查看全部
网页爬虫抓取百度图片(百度爬虫的优化策略及优化方法)
百度爬虫是一个自动程序。内容的爬取路径类似于蜘蛛丝。它通过网页的锚文本链接进行抓取和抓取,所以我们也被称为百度蜘蛛。它抓取网页的内容、图片和文本。等待,爬完后排序再排序,所以网站必须被蜘蛛访问过,被爬过才可以显示在搜索结果页面上。

一、百度爬虫的作用:
搜索引擎通过蜘蛛的自动程序访问各种类型的网站。爬虫首先判断网页是否满足收录的条件。如果满足条件,百度爬虫会下载网页并保存在百度数据中,创建百度快照,当用户搜索某个关键词时,快照通过自己的排序机制进行索引和排序,并然后将排序结果显示给用户。如果网页内容不符合搜索引擎的收录规则,则百度爬虫不会收录,通过链接访问其他页面,重新判断该页面是否为收录。
二、百度爬虫有以下优化策略:
1、 增加链接发现的概率
主动向百度提交新网页无疑是缩短蜘蛛发现机会的一种方式,但蜘蛛的到来并不一定保证它们会收录。取决于页面代码、内容质量、排版、标题等。 另一方面,从逻辑上讲,网站 的外部链接越多,爬虫发现和访问的概率就越大,因此可取在一些高权重的网站上留下外部链接。
2、 增加有效收录的数量和排名页面的百分比
这就需要持续高质量的内容输出,内容必须符合白皮书的要求。一方面可以增加有效收录的数量,另一方面会增加搜索的曝光率,即参与排名的词多。会不断吸引蜘蛛前来拜访。
3、网站使用专用IP地址
爬虫每天对一个IP的爬取频率是有限的。使用共享 IP 很可能会分配给您站点的 IP。此外,也可能受到其他网站的影响,比如违反网站,联合处罚等。之后,就不会再有很多爬虫要访问了。

4、注意内容更新频率
比如你网站先每天发100篇文章,爬虫来的很勤快,然后每天只发几篇文章,有时不更新,这样爬虫的频率就慢了随着时间的推移而减少,所以保持更新频率是蜘蛛稳定访问的关键之一。
5、保证网页打开速度
这一点相信大家都很清楚。所选服务器必须稳定。机房不常被攻击,线路有问题。最好有CDN加速。保证网页的打开速度是百度爬虫顺利访问的前提。如果经常出现无法打开或高延迟,蜘蛛访问的频率肯定会下降。
通过以上几点的分享,我们知道网站需要做哪些优化才能让百度爬虫受益,要注意网站页面的数量多,不代表蜘蛛的频率访问量会高,但有快照,有排名的页面越多,网站的质量越好,索引的页面越多,蜘蛛访问的频率越高。还要注意网站链接层次结构的合理性。关卡过多不利于蜘蛛爬行。
网页爬虫抓取百度图片(一下如何使用python编写一个简单的网络爬虫?(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2021-12-22 14:02
嗯……今天分享一下如何用python写一个简单的网络爬虫。说起爬虫,这简直就是懒人程序员和宅男的福音。写完就可以爬取你想要的任何资源,大到各种学习资源、论文和资料,小到各种图片和视频(...)等等...嗯...讲解完如何搭建一个简单的爬虫框架,会根据框架写一个栗子。栗子代码会从python百科页面开始爬取各种百科页面信息并记录下来。
请注意,这里的标题是“*Lightweight Crawler*”。之所以说它是轻量级的,是因为它只涉及静态网页的分析。至于AJAX异步加载,不涉及JS脚本。
先来个代码链接~~~
Python爬虫内存版
Python爬虫MySQL版
哦对了,这个爬虫有两个版本,一个是MySQL版本,一个是内存板。有什么不同?前者使用 MySQL 数据库来存储访问过的 URL,而后者使用内存。前者的优点是多次运行相互独立,不会重复爬取同一个URL,而后者则不同。每次运行都会从同一个网址开始,重复抓取同一个网址,因为前者是持久化存储,而后者不是。一旦后一个程序关闭,所有访问过的 URL 记录将被清除。不过前者也有一个缺点,就是运行速度比较慢……具体怎么样,大家可以下载代码运行一下。以下是内存存储版~~~
1. python爬虫框架
在写代码之前,首先要确定一个好的代码框架,这也是一个好程序员的习惯(咳咳……我不是一个好程序员……我以后会……)。在这里,我将描述一个简单的爬虫框架。
一个基本的爬虫应该由以下4部分组成:URL调度器、网页下载器、网页解析器、爬取信息输出器。以下是他们协调工作的流程图。
假设这四个功能块都是按照上图的命名方式命名的,那么根据上面的流程图,我们可以编写主爬虫程序如下(为了测试方便,下面的代码限制了爬取的URL数量为10个) :
# 爬虫主程序class SpiderMain(object):def __init__(self):self.url_manager=UrlManager()self.downloader=HtmlDownloader()self.parser=HtmlParser()self.outputer=HtmlOutputer()def craw(self, url):num=0self.url_manager.add_new_url(url)while self.url_manager.has_new_url() and num < 10:url = self.url_manager.get_new_url() print url# 下载网页内容content=self.downloader.download(url)if content is None:print "Craw failed"continue#解析网页数据data = self.parser.parse(url, content)if data is None:print "Craw failed"continuenew_urls = data[0]new_data = data[1]# 收集解析后爬取的数据self.url_manager.add_new_urls(new_urls)self.outputer.collect(new_data)num+=1self.outputer.output()
1) URL 调度器
URL调度器负责对URL进行处理,主要将未访问过的URL提供给网页下载器进行访问下载,屏蔽已访问过的URL,防止程序爬取同一个页面,提高效率。它不断向网页下载器提供新 URL,然后阻止它们,依此类推,直到没有新 URL 或达到爬网次数限制。假设URL调度器是一个类UrlManager,那么我们可以编写如下代码:
# URL调度器class UrlManager(object):def __init__(self):self.new_url=set()self.old_url=set()def add_new_url(self,url):if url not in self.new_url and url not in self.old_url:self.new_url.add(url)def add_new_urls(self,urls):if urls is None or len(urls) == 0:returnfor url in urls:self.add_new_url(url)def has_new_url(self):return len(self.new_url)!=0def get_new_url(self):url = self.new_url.pop()self.old_url.add(url)return url
简单分析一下,UrlManager提供了两个接口,让主程序可以添加一个或多个新的URL,也可以从中获取需要访问的URL。一旦获取到一个 URL,UrlManager 会在 old_url 集合中添加 URL 以阻止它。2) 网络下载器
这个很简单,我们可以通过urllib2提供的接口获取指定URL的内容。代码显示如下:
# 下载网页内容class HtmlDownloader(object):def download(self,url):if url is None:return Nonetry:response = urllib2.urlopen(url)except urllib2.URLError:return Noneexcept urllib2.HTTPError:return Noneif response.getcode() != 200:return Nonereturn response.read()
这里只需要注意使用try-except处理异常,防止程序崩溃即可。3) 网页解析器
我们使用 BeautifulSoap 来解析网页。BeautifulSoup 是第三方 Python 库,专门用于解析网页和获取 DOM 树。下面简单说一下如何使用BeautifulSoap解析网页。我们用百度百科作为栗子。
首先,我们打开此页面并右键单击以查看元素。我们先来看看标题的html代码。
我们可以看到标题Python的html代码是
...Python...
基于这些标签,我们可以使用 BeautifulSoap 来定位标题。下面具体怎么写。
BeautifulSoap 提供了 find 和 find_all 方法来查找一个或多个指定的节点。以上面的标题为栗子,我们就可以写出python代码如下。
soup = BeautifulSoup(content,'html.parser',from_encoding='utf-8')title = soup.find('dd',class_='lemmaWgt-lemmaTitle-title') if title !=None: title = title.find('h1') if title != None: data['title'] = title.get_text() else: data['title'] = ''
BeautifulSoap通过指定标签名称和标签属性内容,从一个html文档中定位符合要求的标签,并获取其属性和内容。BeautifulSoap的详细使用可以百度~~~这里就不赘述了~~~
这里,我们的任务是从一个html页面中获取一个新的百度百科链接,并获取页面的标题内容和摘要。网页解析器的代码如下:
# 分析网页数据
4) 爬取内容的输出设备
这个也比较简单,主要是存储爬取到的数据,然后写入文件。
# 收集爬取到的数据以及将数据输出到文件中class HtmlOutputer(object):def __init__(self):self.datas = []def collect(self,data):self.datas.append(data)def output(self):with open('output.html','wb') as f:f.write('')f.write('')f.write('')f.write('')try:for data in self.datas:f.write('')f.write('%s' % data['url'].encode('utf-8'))f.write('%s' % data['title'].encode('utf-8'))f.write('%s' % data['summary'].encode('utf-8'))f.write('')except Exception as e:print efinally:f.write('')f.write('')f.write('')f.close()
上面的代码提供了一个collect方法来存储爬虫爬取的数据,然后还提供了一个output方法将保存在内存中的数据输出到一个html文件中,并以表格的形式呈现。2. 爬虫运行效果
嗯... 以上就是一个简单爬虫的简单分析。谢谢~
20 查看全部
网页爬虫抓取百度图片(一下如何使用python编写一个简单的网络爬虫?(组图))
嗯……今天分享一下如何用python写一个简单的网络爬虫。说起爬虫,这简直就是懒人程序员和宅男的福音。写完就可以爬取你想要的任何资源,大到各种学习资源、论文和资料,小到各种图片和视频(...)等等...嗯...讲解完如何搭建一个简单的爬虫框架,会根据框架写一个栗子。栗子代码会从python百科页面开始爬取各种百科页面信息并记录下来。
请注意,这里的标题是“*Lightweight Crawler*”。之所以说它是轻量级的,是因为它只涉及静态网页的分析。至于AJAX异步加载,不涉及JS脚本。
先来个代码链接~~~
Python爬虫内存版
Python爬虫MySQL版
哦对了,这个爬虫有两个版本,一个是MySQL版本,一个是内存板。有什么不同?前者使用 MySQL 数据库来存储访问过的 URL,而后者使用内存。前者的优点是多次运行相互独立,不会重复爬取同一个URL,而后者则不同。每次运行都会从同一个网址开始,重复抓取同一个网址,因为前者是持久化存储,而后者不是。一旦后一个程序关闭,所有访问过的 URL 记录将被清除。不过前者也有一个缺点,就是运行速度比较慢……具体怎么样,大家可以下载代码运行一下。以下是内存存储版~~~
1. python爬虫框架
在写代码之前,首先要确定一个好的代码框架,这也是一个好程序员的习惯(咳咳……我不是一个好程序员……我以后会……)。在这里,我将描述一个简单的爬虫框架。
一个基本的爬虫应该由以下4部分组成:URL调度器、网页下载器、网页解析器、爬取信息输出器。以下是他们协调工作的流程图。
假设这四个功能块都是按照上图的命名方式命名的,那么根据上面的流程图,我们可以编写主爬虫程序如下(为了测试方便,下面的代码限制了爬取的URL数量为10个) :
# 爬虫主程序class SpiderMain(object):def __init__(self):self.url_manager=UrlManager()self.downloader=HtmlDownloader()self.parser=HtmlParser()self.outputer=HtmlOutputer()def craw(self, url):num=0self.url_manager.add_new_url(url)while self.url_manager.has_new_url() and num < 10:url = self.url_manager.get_new_url() print url# 下载网页内容content=self.downloader.download(url)if content is None:print "Craw failed"continue#解析网页数据data = self.parser.parse(url, content)if data is None:print "Craw failed"continuenew_urls = data[0]new_data = data[1]# 收集解析后爬取的数据self.url_manager.add_new_urls(new_urls)self.outputer.collect(new_data)num+=1self.outputer.output()
1) URL 调度器
URL调度器负责对URL进行处理,主要将未访问过的URL提供给网页下载器进行访问下载,屏蔽已访问过的URL,防止程序爬取同一个页面,提高效率。它不断向网页下载器提供新 URL,然后阻止它们,依此类推,直到没有新 URL 或达到爬网次数限制。假设URL调度器是一个类UrlManager,那么我们可以编写如下代码:
# URL调度器class UrlManager(object):def __init__(self):self.new_url=set()self.old_url=set()def add_new_url(self,url):if url not in self.new_url and url not in self.old_url:self.new_url.add(url)def add_new_urls(self,urls):if urls is None or len(urls) == 0:returnfor url in urls:self.add_new_url(url)def has_new_url(self):return len(self.new_url)!=0def get_new_url(self):url = self.new_url.pop()self.old_url.add(url)return url
简单分析一下,UrlManager提供了两个接口,让主程序可以添加一个或多个新的URL,也可以从中获取需要访问的URL。一旦获取到一个 URL,UrlManager 会在 old_url 集合中添加 URL 以阻止它。2) 网络下载器
这个很简单,我们可以通过urllib2提供的接口获取指定URL的内容。代码显示如下:
# 下载网页内容class HtmlDownloader(object):def download(self,url):if url is None:return Nonetry:response = urllib2.urlopen(url)except urllib2.URLError:return Noneexcept urllib2.HTTPError:return Noneif response.getcode() != 200:return Nonereturn response.read()
这里只需要注意使用try-except处理异常,防止程序崩溃即可。3) 网页解析器
我们使用 BeautifulSoap 来解析网页。BeautifulSoup 是第三方 Python 库,专门用于解析网页和获取 DOM 树。下面简单说一下如何使用BeautifulSoap解析网页。我们用百度百科作为栗子。
首先,我们打开此页面并右键单击以查看元素。我们先来看看标题的html代码。
我们可以看到标题Python的html代码是
...Python...
基于这些标签,我们可以使用 BeautifulSoap 来定位标题。下面具体怎么写。
BeautifulSoap 提供了 find 和 find_all 方法来查找一个或多个指定的节点。以上面的标题为栗子,我们就可以写出python代码如下。
soup = BeautifulSoup(content,'html.parser',from_encoding='utf-8')title = soup.find('dd',class_='lemmaWgt-lemmaTitle-title') if title !=None: title = title.find('h1') if title != None: data['title'] = title.get_text() else: data['title'] = ''
BeautifulSoap通过指定标签名称和标签属性内容,从一个html文档中定位符合要求的标签,并获取其属性和内容。BeautifulSoap的详细使用可以百度~~~这里就不赘述了~~~
这里,我们的任务是从一个html页面中获取一个新的百度百科链接,并获取页面的标题内容和摘要。网页解析器的代码如下:
# 分析网页数据
4) 爬取内容的输出设备
这个也比较简单,主要是存储爬取到的数据,然后写入文件。
# 收集爬取到的数据以及将数据输出到文件中class HtmlOutputer(object):def __init__(self):self.datas = []def collect(self,data):self.datas.append(data)def output(self):with open('output.html','wb') as f:f.write('')f.write('')f.write('')f.write('')try:for data in self.datas:f.write('')f.write('%s' % data['url'].encode('utf-8'))f.write('%s' % data['title'].encode('utf-8'))f.write('%s' % data['summary'].encode('utf-8'))f.write('')except Exception as e:print efinally:f.write('')f.write('')f.write('')f.close()
上面的代码提供了一个collect方法来存储爬虫爬取的数据,然后还提供了一个output方法将保存在内存中的数据输出到一个html文件中,并以表格的形式呈现。2. 爬虫运行效果
嗯... 以上就是一个简单爬虫的简单分析。谢谢~
20
网页爬虫抓取百度图片(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 129 次浏览 • 2021-12-19 17:03
运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:名人用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1.@ >txtMegry_Result_Best .py 这个文件用户整理了某一天的用户微博信息,比如爬取2018年4月23日的客户端信息, 查看全部
网页爬虫抓取百度图片(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:名人用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1.@ >txtMegry_Result_Best .py 这个文件用户整理了某一天的用户微博信息,比如爬取2018年4月23日的客户端信息,
网页爬虫抓取百度图片(urllib学习python完基础,迷茫.(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2021-12-18 23:05
网址库
在学习了python的基础知识后,我有点困惑。当我闭上眼睛时,一种空白的窒息感不断袭来。我还缺乏练习,所以我拿着爬行器练手。学习了Spartan python爬虫课程后,我将自己的经验整理如下,供后续的翻阅。整个笔记主要分为以下几个部分:
1.做一个简单的爬虫
第一个环境描述
这个没什么好说的,直接上代码吧!
'''
@ urllib为python自带的一个网络库
@ urlopen为urllib的一个方法,用于打开一个连接并抓取网页,
然后通过read()方法把值赋给read()
'''
import urllib
url = "http://www.lifevc.com"#多嘴两句,为什么要选lifevc呢,主要是最近它很惹我.
html = urllib.urlopen(url)
content = html.read()
html.close()
#可以通过print打印出网页内容
print content
很简单,基本没什么好说的,这就是python的魅力,几行代码就可以完成。
当然,我们只是爬网,并没有真正的价值。然后我们将开始做一些有意义的事情。
2.一个小测试
抢百度贴吧图片
其实很简单,因为要抓取图片,首先要分析网页的源代码。
(这里是了解基本的html知识,浏览器以chrome为例)
如图,这里是对后续步骤的简要说明,请参考。
打开网页,右键单击并选择“检查元素”(底部项目)
点击下方弹出框最左边的问号,问号会变成蓝色
移动鼠标点击我们要捕捉的图片(一个可爱的女孩)
如图,我们可以在源码中获取图片的位置
复制下面的源代码
经过分析对比(这里略略),基本上可以看到要抓拍的图像的特征:
正则表达式稍后更新,请大家注意
根据上面的判断,直接上传代码
'''
@本程序用来下载百度贴吧图片
@re 为正则说明库
'''
import urllib
import re
# 获取网页html信息
url = "http://tieba.baidu.com/p/2336739808"
html = urllib.urlopen(url)
content = html.read()
html.close()
# 通过正则匹配图片特征,并获取图片链接
img_tag = re.compile(r'class="BDE_Image" src="(.+?\.jpg)"')
img_links = re.findall(img_tag, content)
# 下载图片 img_counter为图片计数器(文件名)
img_counter = 0
for img_link in img_links:
img_name = '%s.jpg' % img_counter
urllib.urlretrieve(img_link, "//Users//Sean//Downloads//tieba//%s" %img_name)
img_counter += 1
如图所示,我们将抓取您理解的图片
3.总结
与前两节一样,我们可以轻松访问网页或图片。
补充一点小技巧,如果遇到不是很了解的库或者方法,可以使用下面的方法来初步了解一下。
或输入相关搜索。
当然,百度也可以,只是效率太低。建议使用相关搜索(你懂的,绝对满意)。
这里我们讲解如何抓取网页和下载图片,下面我们将讲解如何在有限抓取的情况下抓取网站。
urllib2
上面我们讲解了如何抓取网页和下载图片,下一节我们将讲解如何抓取受限抓取网站
首先,我们还是用我们上个类的方法来抓取一个大家用的网站作为例子。本文主要分为以下几个部分:
1. 抓取受限网页
首先使用我们在上一节中学到的知识来测试一下:
'''
@本程序用来抓取blog.csdn.net网页
'''
import urllib
url = "http://blog.csdn.net/FansUnion"
html = urllib.urlopen(url)
#getcode()方法为返回Http状态码
print html.getcode()
html.close()
#输出
403
这里我们的输出是 403,这意味着访问被拒绝;同样,200 表示请求成功完成;404 表示未找到该 URL。
可以看到csdn被屏蔽了,无法通过第一节的方法获取到网页。这里我们需要启动一个新的库:urllib2
但我们也看到浏览器可以发布该文本。我们可以模拟浏览器操作来获取网页信息吗?
老办法,我们来看看浏览器是如何向csdn服务器提交请求的。首先简单介绍一下方法:
以下是整理后的头部信息
Request Method:GET
Host:blog.csdn.net
Referer:http://blog.csdn.net/?ref=toolbar_logo
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36
然后根据提取的Header信息,使用urllib2的Request方法模拟浏览器向服务器提交请求。代码如下:
# coding=utf-8
'''
@本程序用来抓取受限网页(blog.csdn.net)
@User-Agent:客户端浏览器版本
@Host:服务器地址
@Referer:跳转地址
@GET:请求方法为GET
'''
import urllib2
url = "http://blog.csdn.net/FansUnion"
#定制自定义Header,模拟浏览器向服务器提交请求
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36')
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
#下载网页html并打印
html = urllib2.urlopen(req)
content = html.read()
print content
html.close()
哈哈,如果你限制我,我就跳过你的限制。据说只要浏览器可以访问,就可以被爬虫抓取。
2. 对代码的一些优化
简化提交头方法
发现每次写这么多req.add_header对自己来说都是一种折磨。有什么办法可以复制并使用它吗?答案是肯定的。
#input:
help(urllib2.Request)
#output(因篇幅关系,只取__init__方法)
__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
通过观察,我们发现headers={},就是说可以以字典的方式提交header信息.那就动手试试咯!!
#只取自定义Header部分代码
csdn_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
"Host": "blog.csdn.net",
'Referer': 'http://blog.csdn.net',
"GET": url
}
req = urllib2.Request(url,headers=csdn_headers)
很容易找到,我要感谢斯巴达的无私教导。
提供动态头信息
如果按照上面的方法进行爬取,很多时候提交的信息会过于单一,会被服务器当作机器爬虫来拒绝。
那么我们是否有一些更聪明的方式来提交一些动态数据,答案肯定是肯定的。而且很简单,直接上代码!
'''
@本程序是用来动态提交Header信息
@random 动态库,详情请参考
'''
# coding=utf-8
import urllib2
import random
url = 'http://www.lifevc.com/'
my_headers = [
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.1',
'Mozilla/4.0 (compatible; GoogleToolbar 5.0.2124.2070; Windows 6.0; MSIE 8.0.6001.18241)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; Sleipnir/2.9.8)',
#因篇幅关系,此处省略N条
]
random_header = random.choice(headers)
# 可以通过print random_header查看提交的header信息
req = urllib2.Request(url)
req.add_header("User-Agent", random_header)
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
content = urllib2.urlopen(req).read()
print content
其实很简单,所以我们就完成了代码的一些优化。 查看全部
网页爬虫抓取百度图片(urllib学习python完基础,迷茫.(组图))
网址库
在学习了python的基础知识后,我有点困惑。当我闭上眼睛时,一种空白的窒息感不断袭来。我还缺乏练习,所以我拿着爬行器练手。学习了Spartan python爬虫课程后,我将自己的经验整理如下,供后续的翻阅。整个笔记主要分为以下几个部分:
1.做一个简单的爬虫
第一个环境描述
这个没什么好说的,直接上代码吧!
'''
@ urllib为python自带的一个网络库
@ urlopen为urllib的一个方法,用于打开一个连接并抓取网页,
然后通过read()方法把值赋给read()
'''
import urllib
url = "http://www.lifevc.com"#多嘴两句,为什么要选lifevc呢,主要是最近它很惹我.
html = urllib.urlopen(url)
content = html.read()
html.close()
#可以通过print打印出网页内容
print content
很简单,基本没什么好说的,这就是python的魅力,几行代码就可以完成。
当然,我们只是爬网,并没有真正的价值。然后我们将开始做一些有意义的事情。
2.一个小测试
抢百度贴吧图片
其实很简单,因为要抓取图片,首先要分析网页的源代码。
(这里是了解基本的html知识,浏览器以chrome为例)
如图,这里是对后续步骤的简要说明,请参考。
打开网页,右键单击并选择“检查元素”(底部项目)
点击下方弹出框最左边的问号,问号会变成蓝色
移动鼠标点击我们要捕捉的图片(一个可爱的女孩)
如图,我们可以在源码中获取图片的位置

复制下面的源代码
经过分析对比(这里略略),基本上可以看到要抓拍的图像的特征:
正则表达式稍后更新,请大家注意
根据上面的判断,直接上传代码
'''
@本程序用来下载百度贴吧图片
@re 为正则说明库
'''
import urllib
import re
# 获取网页html信息
url = "http://tieba.baidu.com/p/2336739808"
html = urllib.urlopen(url)
content = html.read()
html.close()
# 通过正则匹配图片特征,并获取图片链接
img_tag = re.compile(r'class="BDE_Image" src="(.+?\.jpg)"')
img_links = re.findall(img_tag, content)
# 下载图片 img_counter为图片计数器(文件名)
img_counter = 0
for img_link in img_links:
img_name = '%s.jpg' % img_counter
urllib.urlretrieve(img_link, "//Users//Sean//Downloads//tieba//%s" %img_name)
img_counter += 1
如图所示,我们将抓取您理解的图片

3.总结
与前两节一样,我们可以轻松访问网页或图片。
补充一点小技巧,如果遇到不是很了解的库或者方法,可以使用下面的方法来初步了解一下。
或输入相关搜索。
当然,百度也可以,只是效率太低。建议使用相关搜索(你懂的,绝对满意)。
这里我们讲解如何抓取网页和下载图片,下面我们将讲解如何在有限抓取的情况下抓取网站。
urllib2
上面我们讲解了如何抓取网页和下载图片,下一节我们将讲解如何抓取受限抓取网站
首先,我们还是用我们上个类的方法来抓取一个大家用的网站作为例子。本文主要分为以下几个部分:
1. 抓取受限网页
首先使用我们在上一节中学到的知识来测试一下:
'''
@本程序用来抓取blog.csdn.net网页
'''
import urllib
url = "http://blog.csdn.net/FansUnion"
html = urllib.urlopen(url)
#getcode()方法为返回Http状态码
print html.getcode()
html.close()
#输出
403
这里我们的输出是 403,这意味着访问被拒绝;同样,200 表示请求成功完成;404 表示未找到该 URL。
可以看到csdn被屏蔽了,无法通过第一节的方法获取到网页。这里我们需要启动一个新的库:urllib2
但我们也看到浏览器可以发布该文本。我们可以模拟浏览器操作来获取网页信息吗?
老办法,我们来看看浏览器是如何向csdn服务器提交请求的。首先简单介绍一下方法:

以下是整理后的头部信息
Request Method:GET
Host:blog.csdn.net
Referer:http://blog.csdn.net/?ref=toolbar_logo
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36
然后根据提取的Header信息,使用urllib2的Request方法模拟浏览器向服务器提交请求。代码如下:
# coding=utf-8
'''
@本程序用来抓取受限网页(blog.csdn.net)
@User-Agent:客户端浏览器版本
@Host:服务器地址
@Referer:跳转地址
@GET:请求方法为GET
'''
import urllib2
url = "http://blog.csdn.net/FansUnion"
#定制自定义Header,模拟浏览器向服务器提交请求
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36')
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
#下载网页html并打印
html = urllib2.urlopen(req)
content = html.read()
print content
html.close()
哈哈,如果你限制我,我就跳过你的限制。据说只要浏览器可以访问,就可以被爬虫抓取。
2. 对代码的一些优化
简化提交头方法
发现每次写这么多req.add_header对自己来说都是一种折磨。有什么办法可以复制并使用它吗?答案是肯定的。
#input:
help(urllib2.Request)
#output(因篇幅关系,只取__init__方法)
__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
通过观察,我们发现headers={},就是说可以以字典的方式提交header信息.那就动手试试咯!!
#只取自定义Header部分代码
csdn_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
"Host": "blog.csdn.net",
'Referer': 'http://blog.csdn.net',
"GET": url
}
req = urllib2.Request(url,headers=csdn_headers)
很容易找到,我要感谢斯巴达的无私教导。
提供动态头信息
如果按照上面的方法进行爬取,很多时候提交的信息会过于单一,会被服务器当作机器爬虫来拒绝。
那么我们是否有一些更聪明的方式来提交一些动态数据,答案肯定是肯定的。而且很简单,直接上代码!
'''
@本程序是用来动态提交Header信息
@random 动态库,详情请参考
'''
# coding=utf-8
import urllib2
import random
url = 'http://www.lifevc.com/'
my_headers = [
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.1',
'Mozilla/4.0 (compatible; GoogleToolbar 5.0.2124.2070; Windows 6.0; MSIE 8.0.6001.18241)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; Sleipnir/2.9.8)',
#因篇幅关系,此处省略N条
]
random_header = random.choice(headers)
# 可以通过print random_header查看提交的header信息
req = urllib2.Request(url)
req.add_header("User-Agent", random_header)
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
content = urllib2.urlopen(req).read()
print content
其实很简单,所以我们就完成了代码的一些优化。
网页爬虫抓取百度图片(请求抓取的url页面要抓取,read() )
网站优化 • 优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2021-12-16 12:56
)
一、Python请求抓取URL页面
要获取URL,首先在Python中模拟对URL的请求
#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
def request(self):
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
if __name__ == '__main__':
nb = NewsBaidu()
nb.request()
运行效果
状态=200,表示请求成功,结果读取()
二、分析页面HTML
1、我们想要捕获的内容是百度新闻左侧列表的标题和href
2、加载re模块并定期匹配我们想要的内容。让我们来看看HTML样式的第一个
这是我们要捕获的页面上部的HTML。可以看到,总理讲话的科技成果将走出"闺房",收录我们想要的内容。[总理讲话的科技成果将走出“闺房”,href[]的内容以常规形式摘录
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
在下面的部分中,我将不分析要捕获的HTML内容。原理是一样的
三、源代码
<p>#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
import urllib
import re
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
self.f = open(u'百度新闻.txt','a')
def request(self):
try:
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
#print result.read()
if result.status == 200:
data = result.read()
self.main(data)
except Exception,e:
print e
finally:
conn.close()
self.f.close()
def main(self,data):
print u'获取中...'
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
items = re.findall(pattern,data)
content = ''
for item in items:
content +=item[1].strip()+'\t'+item[0].strip()+'\t\n'
pattern = re.compile(r'(.*?)',re.S)
items = re.findall(pattern,data)
for item in items:
pattern = re.compile(r'^http://.* 查看全部
网页爬虫抓取百度图片(请求抓取的url页面要抓取,read()
)
一、Python请求抓取URL页面
要获取URL,首先在Python中模拟对URL的请求
#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
def request(self):
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
if __name__ == '__main__':
nb = NewsBaidu()
nb.request()
运行效果
状态=200,表示请求成功,结果读取()
二、分析页面HTML
1、我们想要捕获的内容是百度新闻左侧列表的标题和href
2、加载re模块并定期匹配我们想要的内容。让我们来看看HTML样式的第一个
这是我们要捕获的页面上部的HTML。可以看到,总理讲话的科技成果将走出"闺房",收录我们想要的内容。[总理讲话的科技成果将走出“闺房”,href[]的内容以常规形式摘录
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
在下面的部分中,我将不分析要捕获的HTML内容。原理是一样的
三、源代码
<p>#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
import urllib
import re
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
self.f = open(u'百度新闻.txt','a')
def request(self):
try:
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
#print result.read()
if result.status == 200:
data = result.read()
self.main(data)
except Exception,e:
print e
finally:
conn.close()
self.f.close()
def main(self,data):
print u'获取中...'
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
items = re.findall(pattern,data)
content = ''
for item in items:
content +=item[1].strip()+'\t'+item[0].strip()+'\t\n'
pattern = re.compile(r'(.*?)',re.S)
items = re.findall(pattern,data)
for item in items:
pattern = re.compile(r'^http://.*
网页爬虫抓取百度图片(什么是爬虫爬虫,即网络上爬行的一直蜘蛛?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2021-12-16 04:35
1、什么是爬虫
爬虫是一种网络爬虫。大家可以把它理解为在互联网上爬行的蜘蛛。互联网就像一个大网,爬虫就是在这个网上爬来爬去的蜘蛛。如果它遇到资源,那么它会被爬下来。你想爬什么?由您来控制它。
比如它在爬一个网页,他在这个网上找到了一条路,其实就是一个网页的超链接,然后就可以爬到另一个网页上获取数据了。这样一来,整个相连的网都在这蜘蛛触手可及的范围内,分分钟爬下来也不成问题。
2、浏览网页的过程
当用户浏览网页时,我们可能会看到很多漂亮的图片,比如我们会看到几张图片和百度搜索框。这个过程实际上是在用户输入URL,通过DNS服务器寻找服务器主机之后。向服务器发送请求。服务器解析后,将浏览器的HTML、JS、CSS等文件发送给用户。浏览器解析出来,用户可以看到各种图片。
因此,用户看到的网页本质上都是由HTML代码组成的,爬虫爬取了这些内容。通过对这些HTML代码进行分析和过滤,可以获得图片、文字等资源。
3、URL的含义
URL,即统一资源定位符,也就是我们所说的网址。统一资源定位符是互联网上可用资源的位置和访问方式的简明表示,是互联网上标准资源的地址。Internet 上的每个文件都有一个唯一的 URL,其中收录指示文件位置以及浏览器应如何处理它的信息。
URL格式由三部分组成:
① 第一部分是协议(或称服务方式)。
②第二部分是收录资源的主机的IP地址(有时也包括端口号)。
③第三部分是宿主机资源的具体地址,如目录、文件名等。
爬虫在爬取数据时,必须要有目标网址才能获取数据。因此,它是爬虫获取数据的基本依据。准确理解其含义对爬虫学习有很大帮助。
4、环境配置
学习Python,当然少不了环境的配置。一开始用的是Notepad++,但是发现它的提示功能太弱了。所以,我在 Windows 下使用 PyCharm,在 Linux 下使用 Eclipse for Python。有几个优秀的IDE,可以参考这个文章学习Python推荐的IDE。好的开发工具是前进的动力。我希望你能找到适合你的 IDE。
知识点补充:
爬虫和爬虫的基本逻辑是什么
“爬行动物”是一个形象术语。互联网就像一个大网,爬虫就是在这个大网上爬行的程序或脚本。如果您遇到错误(资源),请获取或下载所需的资源。这个资源通常是网页、文件等,你可以通过资源中的url链接继续抓取这些链接的资源。
您也可以使用爬虫来模拟我们正常的上网行为。打开网页,分析网页内容,得到我们想要的。 查看全部
网页爬虫抓取百度图片(什么是爬虫爬虫,即网络上爬行的一直蜘蛛?)
1、什么是爬虫
爬虫是一种网络爬虫。大家可以把它理解为在互联网上爬行的蜘蛛。互联网就像一个大网,爬虫就是在这个网上爬来爬去的蜘蛛。如果它遇到资源,那么它会被爬下来。你想爬什么?由您来控制它。
比如它在爬一个网页,他在这个网上找到了一条路,其实就是一个网页的超链接,然后就可以爬到另一个网页上获取数据了。这样一来,整个相连的网都在这蜘蛛触手可及的范围内,分分钟爬下来也不成问题。
2、浏览网页的过程
当用户浏览网页时,我们可能会看到很多漂亮的图片,比如我们会看到几张图片和百度搜索框。这个过程实际上是在用户输入URL,通过DNS服务器寻找服务器主机之后。向服务器发送请求。服务器解析后,将浏览器的HTML、JS、CSS等文件发送给用户。浏览器解析出来,用户可以看到各种图片。
因此,用户看到的网页本质上都是由HTML代码组成的,爬虫爬取了这些内容。通过对这些HTML代码进行分析和过滤,可以获得图片、文字等资源。
3、URL的含义
URL,即统一资源定位符,也就是我们所说的网址。统一资源定位符是互联网上可用资源的位置和访问方式的简明表示,是互联网上标准资源的地址。Internet 上的每个文件都有一个唯一的 URL,其中收录指示文件位置以及浏览器应如何处理它的信息。
URL格式由三部分组成:
① 第一部分是协议(或称服务方式)。
②第二部分是收录资源的主机的IP地址(有时也包括端口号)。
③第三部分是宿主机资源的具体地址,如目录、文件名等。
爬虫在爬取数据时,必须要有目标网址才能获取数据。因此,它是爬虫获取数据的基本依据。准确理解其含义对爬虫学习有很大帮助。
4、环境配置
学习Python,当然少不了环境的配置。一开始用的是Notepad++,但是发现它的提示功能太弱了。所以,我在 Windows 下使用 PyCharm,在 Linux 下使用 Eclipse for Python。有几个优秀的IDE,可以参考这个文章学习Python推荐的IDE。好的开发工具是前进的动力。我希望你能找到适合你的 IDE。
知识点补充:
爬虫和爬虫的基本逻辑是什么
“爬行动物”是一个形象术语。互联网就像一个大网,爬虫就是在这个大网上爬行的程序或脚本。如果您遇到错误(资源),请获取或下载所需的资源。这个资源通常是网页、文件等,你可以通过资源中的url链接继续抓取这些链接的资源。
您也可以使用爬虫来模拟我们正常的上网行为。打开网页,分析网页内容,得到我们想要的。
网页爬虫抓取百度图片(你检查下这个网页中的内容是不是通过js代码读取外部json数据来动态更新的)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-12-13 16:20
你通过js代码读取外部json数据来检查这个网页的内容是否动态更新。
请求只能获取网页的静态源代码,不能获取动态更新的内容。
对于动态更新的内容,使用 selenium 进行爬取。
或者通过F12控制台分析加载页面数据的链接,找到真正的json数据的地址进行爬取。
右键单击页面,在右键菜单中选择“查看网页源代码”。
这是网页的静态源代码。
如果本网页的静态源代码中有需要爬取的内容,则说明该页面没有动态内容,可以通过请求进行爬取。
否则就意味着页面内容是动态更新的,需要用selenium来爬取。
您的问题的答案代码如下:
import requests
import urllib.request
from bs4 import BeautifulSoup
import os
import time
url = 'https://image.baidu.com/search ... 39%3B
headers = {
'Host': 'image.baidu.com',
'Pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
response = requests.get(url, headers=headers) # 使用headers避免访问受限
print(response.json())
items = response.json()['data']
folder_path = './photo/'
if not os.path.exists(folder_path): # 判断文件夹是否已经存在
os.makedirs(folder_path) # 创建文件夹
for index, item in enumerate(items):
if item:
print(item['middleURL'])
html = requests.get(item['middleURL']) # get函数获取图片链接地址,requests发送访问请求
img_name = folder_path + str(index + 1) + '.png'
with open(img_name, 'wb') as file: # 以byte形式将图片数据写入
file.write(html.content)
file.flush()
file.close() # 关闭文件
print('第%d张图片下载完成' % (index + 1))
time.sleep(1) # 自定义延时
print('抓取完成')
如果有帮助,希望采纳!谢谢! 查看全部
网页爬虫抓取百度图片(你检查下这个网页中的内容是不是通过js代码读取外部json数据来动态更新的)
你通过js代码读取外部json数据来检查这个网页的内容是否动态更新。
请求只能获取网页的静态源代码,不能获取动态更新的内容。
对于动态更新的内容,使用 selenium 进行爬取。
或者通过F12控制台分析加载页面数据的链接,找到真正的json数据的地址进行爬取。
右键单击页面,在右键菜单中选择“查看网页源代码”。

这是网页的静态源代码。
如果本网页的静态源代码中有需要爬取的内容,则说明该页面没有动态内容,可以通过请求进行爬取。
否则就意味着页面内容是动态更新的,需要用selenium来爬取。
您的问题的答案代码如下:
import requests
import urllib.request
from bs4 import BeautifulSoup
import os
import time
url = 'https://image.baidu.com/search ... 39%3B
headers = {
'Host': 'image.baidu.com',
'Pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
response = requests.get(url, headers=headers) # 使用headers避免访问受限
print(response.json())
items = response.json()['data']
folder_path = './photo/'
if not os.path.exists(folder_path): # 判断文件夹是否已经存在
os.makedirs(folder_path) # 创建文件夹
for index, item in enumerate(items):
if item:
print(item['middleURL'])
html = requests.get(item['middleURL']) # get函数获取图片链接地址,requests发送访问请求
img_name = folder_path + str(index + 1) + '.png'
with open(img_name, 'wb') as file: # 以byte形式将图片数据写入
file.write(html.content)
file.flush()
file.close() # 关闭文件
print('第%d张图片下载完成' % (index + 1))
time.sleep(1) # 自定义延时
print('抓取完成')

如果有帮助,希望采纳!谢谢!
网页爬虫抓取百度图片( Python3实战入门数据库篇--把爬取到的数据存到数据库)
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2021-12-31 09:20
Python3实战入门数据库篇--把爬取到的数据存到数据库)
# 简单的网络爬虫
from urllib import request
import chardet
response = request.urlopen("http://www.jianshu.com/")
html = response.read()
charset = chardet.detect(html)# {'language': '', 'encoding': 'utf-8', 'confidence': 0.99}
html = html.decode(str(charset["encoding"])) # 解码
print(html)
由于爬取的html文档比较长,这里发个简单的帖子给大家看看
..........后面省略一大堆
这是对Python3的爬虫的简单介绍。是不是很简单?我建议你输入几次。
三、Python3抓取网页中的图片并将图片保存到本地文件夹
目标
import re
import urllib.request
#爬取网页html
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html
html = getHtml("http://tieba.baidu.com/p/3205263090")
html = html.decode('UTF-8')
#获取图片链接的方法
def getImg(html):
# 利用正则表达式匹配网页里的图片地址
reg = r'src="([.*S]*.jpg)" pic_ext="jpeg"'
imgre=re.compile(reg)
imglist=re.findall(imgre,html)
return imglist
imgList=getImg(html)
imgCount=0
#for把获取到的图片都下载到本地pic文件夹里,保存之前先在本地建一个pic文件夹
for imgPath in imgList:
f=open("../pic/"+str(imgCount)+".jpg",'wb')
f.write((urllib.request.urlopen(imgPath)).read())
f.close()
imgCount+=1
print("全部抓取完成")
迫不及待想看看有哪些美图被爬了
爬24个女孩的照片真是太容易了。是不是很简单。
四、Python3抓取新闻网站新闻列表
这里稍微复杂一点,给大家解释一下。
分析上图,我们要抓取的信息在div中的a标签和img标签中,所以我们要考虑的就是如何获取这些信息
这里要用到我们导入的BeautifulSoup4库,这里是关键代码
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
上面代码得到的allList就是我们要获取的新闻列表,抓到的如下
[

,

,

,

,

,

,

,

,

,

,

]
这里的数据是抓到的,但是太乱了,还有很多不是我们想要的,下面就是通过遍历提取我们的有效信息
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
这里添加了异常处理,主要是因为有些新闻可能没有标题,没有网址或图片。如果不进行异常处理,可能会导致我们的爬行中断。
过滤后的有效信息
标题 标题为空
url: https://www.huxiu.com/article/211390.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 TFBOYS成员各自飞,商业价值天花板已现?
url: https://www.huxiu.com/article/214982.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 买手店江湖
url: https://www.huxiu.com/article/213703.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 iPhone X正式告诉我们,手机和相机开始分道扬镳
url: https://www.huxiu.com/article/214679.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 信用已被透支殆尽,乐视汽车或成贾跃亭弃子
url: https://www.huxiu.com/article/214962.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 别小看“搞笑诺贝尔奖”,要向好奇心致敬
url: https://www.huxiu.com/article/214867.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 10 年前改变世界的,可不止有 iPhone | 发车
url: https://www.huxiu.com/article/214954.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 感谢微博替我做主
url: https://www.huxiu.com/article/214908.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 苹果确认取消打赏抽成,但还有多少内容让你觉得值得掏腰包?
url: https://www.huxiu.com/article/215001.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 中国音乐的“全面付费”时代即将到来?
url: https://www.huxiu.com/article/214969.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 百丽退市启示录:“一代鞋王”如何与新生代消费者渐行渐远
url: https://www.huxiu.com/article/214964.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
这里我们抓取新闻网站新闻信息就大功告成了,下面贴出完整代码
from bs4 import BeautifulSoup
from urllib import request
import chardet
url = "https://www.huxiu.com"
response = request.urlopen(url)
html = response.read()
charset = chardet.detect(html)
html = html.decode(str(charset["encoding"])) # 设置抓取到的html的编码方式
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
一旦获得了数据,我们仍然需要将数据存储在数据库中。只要存储在我们的数据库中,并且数据库中有数据,我们就可以进行后续的数据分析处理,或者使用爬取的文章,给app提供新闻api接口。当然,这是一个故事。自学Python数据库操作后,再写一篇文章
《Python3数据库实战入门-将爬取到的数据存入数据库》
编程小石头,为分享干货而生!据说,每一个年轻、上进、高颜值的互联网人,都会关注编程小石头。 查看全部
网页爬虫抓取百度图片(
Python3实战入门数据库篇--把爬取到的数据存到数据库)
# 简单的网络爬虫
from urllib import request
import chardet
response = request.urlopen("http://www.jianshu.com/")
html = response.read()
charset = chardet.detect(html)# {'language': '', 'encoding': 'utf-8', 'confidence': 0.99}
html = html.decode(str(charset["encoding"])) # 解码
print(html)
由于爬取的html文档比较长,这里发个简单的帖子给大家看看
..........后面省略一大堆
这是对Python3的爬虫的简单介绍。是不是很简单?我建议你输入几次。
三、Python3抓取网页中的图片并将图片保存到本地文件夹
目标
import re
import urllib.request
#爬取网页html
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html
html = getHtml("http://tieba.baidu.com/p/3205263090")
html = html.decode('UTF-8')
#获取图片链接的方法
def getImg(html):
# 利用正则表达式匹配网页里的图片地址
reg = r'src="([.*S]*.jpg)" pic_ext="jpeg"'
imgre=re.compile(reg)
imglist=re.findall(imgre,html)
return imglist
imgList=getImg(html)
imgCount=0
#for把获取到的图片都下载到本地pic文件夹里,保存之前先在本地建一个pic文件夹
for imgPath in imgList:
f=open("../pic/"+str(imgCount)+".jpg",'wb')
f.write((urllib.request.urlopen(imgPath)).read())
f.close()
imgCount+=1
print("全部抓取完成")
迫不及待想看看有哪些美图被爬了

爬24个女孩的照片真是太容易了。是不是很简单。
四、Python3抓取新闻网站新闻列表
这里稍微复杂一点,给大家解释一下。

分析上图,我们要抓取的信息在div中的a标签和img标签中,所以我们要考虑的就是如何获取这些信息
这里要用到我们导入的BeautifulSoup4库,这里是关键代码
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
上面代码得到的allList就是我们要获取的新闻列表,抓到的如下
[

,

,

,

,

,

,

,

,

,

,

]
这里的数据是抓到的,但是太乱了,还有很多不是我们想要的,下面就是通过遍历提取我们的有效信息
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
这里添加了异常处理,主要是因为有些新闻可能没有标题,没有网址或图片。如果不进行异常处理,可能会导致我们的爬行中断。
过滤后的有效信息
标题 标题为空
url: https://www.huxiu.com/article/211390.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 TFBOYS成员各自飞,商业价值天花板已现?
url: https://www.huxiu.com/article/214982.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 买手店江湖
url: https://www.huxiu.com/article/213703.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 iPhone X正式告诉我们,手机和相机开始分道扬镳
url: https://www.huxiu.com/article/214679.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 信用已被透支殆尽,乐视汽车或成贾跃亭弃子
url: https://www.huxiu.com/article/214962.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 别小看“搞笑诺贝尔奖”,要向好奇心致敬
url: https://www.huxiu.com/article/214867.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 10 年前改变世界的,可不止有 iPhone | 发车
url: https://www.huxiu.com/article/214954.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 感谢微博替我做主
url: https://www.huxiu.com/article/214908.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 苹果确认取消打赏抽成,但还有多少内容让你觉得值得掏腰包?
url: https://www.huxiu.com/article/215001.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 中国音乐的“全面付费”时代即将到来?
url: https://www.huxiu.com/article/214969.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
标题 百丽退市启示录:“一代鞋王”如何与新生代消费者渐行渐远
url: https://www.huxiu.com/article/214964.html
图片地址: https://img.huxiucdn.com/artic ... /210/|imageMogr2/strip/interlace/1/quality/85/format/jpg
==============================================================================================
这里我们抓取新闻网站新闻信息就大功告成了,下面贴出完整代码
from bs4 import BeautifulSoup
from urllib import request
import chardet
url = "https://www.huxiu.com"
response = request.urlopen(url)
html = response.read()
charset = chardet.detect(html)
html = html.decode(str(charset["encoding"])) # 设置抓取到的html的编码方式
# 使用剖析器为html.parser
soup = BeautifulSoup(html, 'html.parser')
# 获取到每一个class=hot-article-img的a节点
allList = soup.select('.hot-article-img')
#遍历列表,获取有效信息
for news in allList:
aaa = news.select('a')
# 只选择长度大于0的结果
if len(aaa) > 0:
# 文章链接
try:#如果抛出异常就代表为空
href = url + aaa[0]['href']
except Exception:
href=''
# 文章图片url
try:
imgUrl = aaa[0].select('img')[0]['src']
except Exception:
imgUrl=""
# 新闻标题
try:
title = aaa[0]['title']
except Exception:
title = "标题为空"
print("标题",title,"nurl:",href,"n图片地址:",imgUrl)
print("==============================================================================================")
一旦获得了数据,我们仍然需要将数据存储在数据库中。只要存储在我们的数据库中,并且数据库中有数据,我们就可以进行后续的数据分析处理,或者使用爬取的文章,给app提供新闻api接口。当然,这是一个故事。自学Python数据库操作后,再写一篇文章
《Python3数据库实战入门-将爬取到的数据存入数据库》
编程小石头,为分享干货而生!据说,每一个年轻、上进、高颜值的互联网人,都会关注编程小石头。
网页爬虫抓取百度图片(百度网页搜索还支持多种搜索结果块,计算块等多样的截图)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-12-30 22:21
百度蜘蛛是一个基于Python的百度搜索结果爬虫,支持多搜索结果。本期文章将从多方面介绍百度蜘蛛。
什么是百度蜘蛛?
百度蜘蛛是一个强大但轻量级的百度搜索结果提取器,基于BeautifulSoup4和requests。支持多种搜索结果,包括百度网页搜索、百度图片搜索、百度知道搜索、百度视频搜索、百度新闻搜索、百度图书馆搜索、百度体验搜索、百度百科搜索。其中,百度网页搜索还支持多种搜索结果块,如百科块、贴吧块、计算块等搜索结果。
GitHub: /BaiduSpider/BaiduSpider
文档:
PyPI: /project/BaiduSpider/
如何下载百度蜘蛛?
在你的项目中,直接使用pip安装:
pip install baiduspider
当然,你也可以从 GitHub 克隆:
git clone https://github.com/BaiduSpider/BaiduSpider.git && python setup.py install
然后导入您的项目文件:
from baiduspider import BaiduSpider
# ...
百度蜘蛛使用简单
百度蜘蛛的使用也很简单。下面的例子打印了BaiduSpider的网页搜索的返回结果,它是网页搜索CLI的简单版本:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input()))
对于上面例子的输出
这个怎么样?是不是很简单?除了易用性,百度蜘蛛还支持自定义返回值。例如,我只想查看最常见的网络搜索结果,没有其他花里胡哨的东西。然后,我可以写:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input(), exclude=['all']))
只保留正常搜索结果输出的截图
是的,只有一个参数:exclude。这个参数很强大,有兴趣可以去文档看看。
使用百度蜘蛛制作的项目
这里我选择了两个用BaiduSpider做的开源项目,聚合搜索和标题拍拍。下面我分别介绍一下这两个项目。
聚合搜索
聚合搜索是一个聚合搜索引擎,现已接入百度、谷歌、搜狗、微信四大平台。在线演示:/GitHub:/Limourli-liu/Aggregate-search
拍
这是一个利用深度学习技术自动解决小学应用问题的入口,数据抓取部分使用了百度蜘蛛。GitHub: /jackli777/CCF-BDCI-2020-MWP-
最后
如果你喜欢百度蜘蛛这个项目,请留下你的star!您的支持对我们真的很重要~
GitHub项目地址:/BaiduSpider/BaiduSpider
文档:baiduspider.github.io/
PyPI: /project/BaiduSpider/
谢谢阅读! 查看全部
网页爬虫抓取百度图片(百度网页搜索还支持多种搜索结果块,计算块等多样的截图)
百度蜘蛛是一个基于Python的百度搜索结果爬虫,支持多搜索结果。本期文章将从多方面介绍百度蜘蛛。
什么是百度蜘蛛?
百度蜘蛛是一个强大但轻量级的百度搜索结果提取器,基于BeautifulSoup4和requests。支持多种搜索结果,包括百度网页搜索、百度图片搜索、百度知道搜索、百度视频搜索、百度新闻搜索、百度图书馆搜索、百度体验搜索、百度百科搜索。其中,百度网页搜索还支持多种搜索结果块,如百科块、贴吧块、计算块等搜索结果。
GitHub: /BaiduSpider/BaiduSpider
文档:
PyPI: /project/BaiduSpider/
如何下载百度蜘蛛?
在你的项目中,直接使用pip安装:
pip install baiduspider
当然,你也可以从 GitHub 克隆:
git clone https://github.com/BaiduSpider/BaiduSpider.git && python setup.py install
然后导入您的项目文件:
from baiduspider import BaiduSpider
# ...
百度蜘蛛使用简单
百度蜘蛛的使用也很简单。下面的例子打印了BaiduSpider的网页搜索的返回结果,它是网页搜索CLI的简单版本:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input()))

对于上面例子的输出
这个怎么样?是不是很简单?除了易用性,百度蜘蛛还支持自定义返回值。例如,我只想查看最常见的网络搜索结果,没有其他花里胡哨的东西。然后,我可以写:
from baiduspider import BaiduSpider
from pprint import pprint
pprint(BaiduSpider().search_web(input(), exclude=['all']))
只保留正常搜索结果输出的截图
是的,只有一个参数:exclude。这个参数很强大,有兴趣可以去文档看看。
使用百度蜘蛛制作的项目
这里我选择了两个用BaiduSpider做的开源项目,聚合搜索和标题拍拍。下面我分别介绍一下这两个项目。
聚合搜索
聚合搜索是一个聚合搜索引擎,现已接入百度、谷歌、搜狗、微信四大平台。在线演示:/GitHub:/Limourli-liu/Aggregate-search
拍
这是一个利用深度学习技术自动解决小学应用问题的入口,数据抓取部分使用了百度蜘蛛。GitHub: /jackli777/CCF-BDCI-2020-MWP-
最后
如果你喜欢百度蜘蛛这个项目,请留下你的star!您的支持对我们真的很重要~
GitHub项目地址:/BaiduSpider/BaiduSpider
文档:baiduspider.github.io/
PyPI: /project/BaiduSpider/
谢谢阅读!
网页爬虫抓取百度图片(,说真话,百度对图像辨认照常有待高的网站排行)
网站优化 • 优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-12-29 19:20
相信我们在百度上搜索东西的时候,很多搜索功能都会收录
图片,但是为什么有的网站有图片,有的网站没有图片呢?这涉及到进入百度快照时蜘蛛抓取的作用。.
信任在搜索功能中。大多数人喜欢点击带有图片的网站链接。每个人都喜欢有图片和文字的网站。而在百度的算法中,百度会更加重视有图片的文章。
那么这些图像是如何增加的呢?有几种具体的方法。
一、 百度投稿
但是由于百度的要求过于严格,目前很多网站都无法提交自己的logo。只要网址权重高、流量大、排名高,就可以手动添加logo。
二、百度蜘蛛爬行
这要看运气了。说实话,百度的图片识别在网站上还是排名靠前的,而且正好用于百度一贯网站的logo手机的开发。百度不抢词条,而是输入小图。真是无语了。
网站优化编辑之前也查了资料,为什么把图片设置成363×225,有利于百度的抓拍。连给图片添加连接的方法,小编其实都试过了,但是百度输入的八类,像往常一样输入想要它输入的图片并不容易。
三、如何输入多张图片
相信每一个站长或者公司老板都希望百度能把自己的网站变成一排图片。
百度能给网站这么高的评价,不仅是网站本身的权重和流量更好,而且这个内容一定很有价值,文章本身的TDK设置完善,文章内容也要能处理好访问者的标题,内容可以留住访问者,降低跳出率,那么百度肯定会给这篇文章一个高分。当然,严肃的一切照旧的文章应该配以图文并茂。不难看出,文章中的图片不得少于6张,否则百度也无法为您补上这一排图片。
随着百度对图片识别的合规性越来越高,相信未来百度将能够更准确的抓取网站的图片,更直观地向我们展示搜索者想要的内容,从而提高合规性的网民并更快地找到它。你想找什么。无论这对于求道者来说,照常展示无疑是非常有益的。 查看全部
网页爬虫抓取百度图片(,说真话,百度对图像辨认照常有待高的网站排行)
相信我们在百度上搜索东西的时候,很多搜索功能都会收录
图片,但是为什么有的网站有图片,有的网站没有图片呢?这涉及到进入百度快照时蜘蛛抓取的作用。.
信任在搜索功能中。大多数人喜欢点击带有图片的网站链接。每个人都喜欢有图片和文字的网站。而在百度的算法中,百度会更加重视有图片的文章。

那么这些图像是如何增加的呢?有几种具体的方法。
一、 百度投稿
但是由于百度的要求过于严格,目前很多网站都无法提交自己的logo。只要网址权重高、流量大、排名高,就可以手动添加logo。
二、百度蜘蛛爬行
这要看运气了。说实话,百度的图片识别在网站上还是排名靠前的,而且正好用于百度一贯网站的logo手机的开发。百度不抢词条,而是输入小图。真是无语了。
网站优化编辑之前也查了资料,为什么把图片设置成363×225,有利于百度的抓拍。连给图片添加连接的方法,小编其实都试过了,但是百度输入的八类,像往常一样输入想要它输入的图片并不容易。
三、如何输入多张图片
相信每一个站长或者公司老板都希望百度能把自己的网站变成一排图片。
百度能给网站这么高的评价,不仅是网站本身的权重和流量更好,而且这个内容一定很有价值,文章本身的TDK设置完善,文章内容也要能处理好访问者的标题,内容可以留住访问者,降低跳出率,那么百度肯定会给这篇文章一个高分。当然,严肃的一切照旧的文章应该配以图文并茂。不难看出,文章中的图片不得少于6张,否则百度也无法为您补上这一排图片。
随着百度对图片识别的合规性越来越高,相信未来百度将能够更准确的抓取网站的图片,更直观地向我们展示搜索者想要的内容,从而提高合规性的网民并更快地找到它。你想找什么。无论这对于求道者来说,照常展示无疑是非常有益的。
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2021-12-26 17:00
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片 查看全部
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片
网页爬虫抓取百度图片(Python入门网络爬虫之精华版()Python学习网络)
网站优化 • 优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2021-12-26 16:15
Python入门网络爬虫的精髓
Python入门网络爬虫的本质 Python学习网络爬虫主要分为爬取、分析、存储3大部分。另外,比较常用的爬虫框架Scrapy,这里最后也有详细介绍。首先,我将我总结的相关文章罗列出来。这些涵盖了网络爬虫入门所需的基本概念和技巧:宁哥的小站—网络爬虫。当我们在浏览器中输入一个 URL 并按 Enter 时,后台会发生什么?比如你打字,就会看到宁小站的首页。简单来说,这个过程发生了以下四个步骤: 找到域名对应的IP地址。向IP对应的服务器发送请求。服务器响应请求并将网页内容发回。浏览器解析网页的内容。网络爬虫要做的,简单来说就是实现浏览器的功能。通过指定url,数据直接返回给用户,无需手动操作浏览器一步步获取。这一步爬取,你想清楚获取什么内容?是HTML源代码,还是Json格式的字符串等等。1. 最基本的爬取大多数情况下是get请求,即直接从对方服务器获取数据。首先Python自带了两个模块,urllib和urllib2,基本可以满足一般的页面爬取。另外requests也是一个很有用的包,类似的还有httplib2等。要求:
data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.get(url=url, params=data) Urllib2:数据是stringimport urllib,urllib2data = urllib .urlencode(data)full_url = url+'?'+dataresponse = urllib2.urlopen(full_url) 相关参考:网易新闻排名回顾参考项目:网络爬虫最基本的爬虫:抓取网易新闻排名列表2. 处理登录情况2.1 表单登录的使用是post请求,即先将表单数据发送到服务器,服务器再将返回的cookie存储在本地。data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.post(url=url, data=data) Urllib2:
因此,当需要验证码时,可以使用带有验证码登录的cookie来解决问题。import requestsrequests_session = requests.session() response = requests_session.post(url=url_login, data=data) 如果有验证码,此时使用 response = requests_session.post(url=url_login, data=data) 是不行的,应该做如下: response_captcha = requests_session.get(url=url_login, cookies=cookies) response1 = requests.get(url_login) # 未登录 response2 = requests_session.get(url_login) # 登录了,因为我得到了响应 Cookie 之前!response3 = requests_session.get(url_results) # 登录了,因为之前拿到了Response Cookie!相关参考:网络爬虫-验证码登录参考项目:网络爬虫用户名密码和验证码登录:
这种情况下,最好的办法就是维护一个代理IP池。网上有很多免费的代理IP。好坏参差不齐,通过筛选就能找到能用的。在“频繁点击”的情况下,我们也可以通过限制爬虫访问网站的频率来避免被网站封禁。proxies = {'http':':XXXX'}请求:import requestsresponse = requests.get(url=url, proxies=proxies)Urllib2:import urllib2proxy_support = urllib2.ProxyHandler(proxies)opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)urllib2.install_opener(opener) # 安装opener,然后调用urlopen()会使用安装的opener对象 response = urllib2.urlopen ( url)3.2 时间设置的适用性:频率限制。
在这种情况下,添加 User-Agent 以指示您正在通过浏览器访问。有时还会检查你是否带了Referer信息,检查你的Referer是否合法,一般会添加Referer。headers = {'User-Agent':'XXXXX'} # 伪装成浏览器访问,适用于拒绝抓取的网站 headers = {'Referer':'XXXXX'} headers = {'User-Agent':'XXXXX' , 'Referer':'XXXXX'}Requests: response = requests.get(url=url, headers=headers)Urllib2: import urllib, urllib2req = urllib2.Request(url=url, headers=headers)response = urllib 2.urlopen(req)4. 关于断开和重新连接就不多说了。def multi_session(session, *arg):retryTimes = 20 而 retryTimes>0:try:return session.post(*arg)except:print'.',
5.多进程爬取这里是基于华尔街知识的并行爬取实验对比:Python多进程爬取和Java单线程和多线程爬取相关参考:多进程和多线程的比较Python和Java之间的计算方法6. 对于Ajax请求的处理,对于“加载更多”的情况,Ajax是用来传输大量数据的。它的工作原理是:从网页的url中加载网页的源代码后,JavaScript程序就会在浏览器中执行。这些程序将加载更多内容并“填充”网页。这就是为什么如果你直接去爬取页面本身的url,你将找不到页面的实际内容。这里,如果使用谷歌浏览器分析“请求”对应的链接(方法:右键→评论元素→网络→清除,点击“加载更多”,会出现对应的GET链接,找到类型text/html,点击即可查看get参数或者复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。
它可以对浏览器进行操作,包括字符填充、鼠标点击、获取元素、页面切换等一系列操作。简而言之,Selenium 可以做浏览器可以做的一切。下面是使用selenium动态获取给定城市列表后去哪儿网票价信息的代码。参考项目:网络爬虫Selenium 使用代理登录:爬取去哪儿网站8. 验证码识别 对于有验证码的网站,我们有三种方法:使用代理和更新IP。使用cookie登录。识别码。前面已经讲过使用proxy和使用cookie登录了,再来说说验证码识别。可以使用开源的Tesseract-OCR系统下载和识别验证码图片,并将识别出的字符传送到履带系统进行模拟着陆。当然,验证码图片也可以上传到编码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。
我们可以选择将其保存在文本文件中,或者保存在 MySQL 或 MongoDB 数据库中。存储中需要注意两个问题: 如何去重网页?内容以什么形式存储?ScrapyScrapy 是一个基于 Twisted 的开源 Python 爬虫框架,业界广泛使用。相关内容请参考基于Scrapy的网络爬虫构建。同时将本文介绍的微信搜索爬取的项目代码提供给大家,作为学习的参考。参考项目:使用Scrapy或Requests递归抓取微信搜索结果
现在下载 查看全部
网页爬虫抓取百度图片(Python入门网络爬虫之精华版()Python学习网络)
Python入门网络爬虫的精髓
Python入门网络爬虫的本质 Python学习网络爬虫主要分为爬取、分析、存储3大部分。另外,比较常用的爬虫框架Scrapy,这里最后也有详细介绍。首先,我将我总结的相关文章罗列出来。这些涵盖了网络爬虫入门所需的基本概念和技巧:宁哥的小站—网络爬虫。当我们在浏览器中输入一个 URL 并按 Enter 时,后台会发生什么?比如你打字,就会看到宁小站的首页。简单来说,这个过程发生了以下四个步骤: 找到域名对应的IP地址。向IP对应的服务器发送请求。服务器响应请求并将网页内容发回。浏览器解析网页的内容。网络爬虫要做的,简单来说就是实现浏览器的功能。通过指定url,数据直接返回给用户,无需手动操作浏览器一步步获取。这一步爬取,你想清楚获取什么内容?是HTML源代码,还是Json格式的字符串等等。1. 最基本的爬取大多数情况下是get请求,即直接从对方服务器获取数据。首先Python自带了两个模块,urllib和urllib2,基本可以满足一般的页面爬取。另外requests也是一个很有用的包,类似的还有httplib2等。要求:
data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.get(url=url, params=data) Urllib2:数据是stringimport urllib,urllib2data = urllib .urlencode(data)full_url = url+'?'+dataresponse = urllib2.urlopen(full_url) 相关参考:网易新闻排名回顾参考项目:网络爬虫最基本的爬虫:抓取网易新闻排名列表2. 处理登录情况2.1 表单登录的使用是post请求,即先将表单数据发送到服务器,服务器再将返回的cookie存储在本地。data = {'data1':'XXXXX','data2':'XXXXX'} 请求:数据是字典,jsonimport requestsresponse = requests.post(url=url, data=data) Urllib2:
因此,当需要验证码时,可以使用带有验证码登录的cookie来解决问题。import requestsrequests_session = requests.session() response = requests_session.post(url=url_login, data=data) 如果有验证码,此时使用 response = requests_session.post(url=url_login, data=data) 是不行的,应该做如下: response_captcha = requests_session.get(url=url_login, cookies=cookies) response1 = requests.get(url_login) # 未登录 response2 = requests_session.get(url_login) # 登录了,因为我得到了响应 Cookie 之前!response3 = requests_session.get(url_results) # 登录了,因为之前拿到了Response Cookie!相关参考:网络爬虫-验证码登录参考项目:网络爬虫用户名密码和验证码登录:
这种情况下,最好的办法就是维护一个代理IP池。网上有很多免费的代理IP。好坏参差不齐,通过筛选就能找到能用的。在“频繁点击”的情况下,我们也可以通过限制爬虫访问网站的频率来避免被网站封禁。proxies = {'http':':XXXX'}请求:import requestsresponse = requests.get(url=url, proxies=proxies)Urllib2:import urllib2proxy_support = urllib2.ProxyHandler(proxies)opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)urllib2.install_opener(opener) # 安装opener,然后调用urlopen()会使用安装的opener对象 response = urllib2.urlopen ( url)3.2 时间设置的适用性:频率限制。
在这种情况下,添加 User-Agent 以指示您正在通过浏览器访问。有时还会检查你是否带了Referer信息,检查你的Referer是否合法,一般会添加Referer。headers = {'User-Agent':'XXXXX'} # 伪装成浏览器访问,适用于拒绝抓取的网站 headers = {'Referer':'XXXXX'} headers = {'User-Agent':'XXXXX' , 'Referer':'XXXXX'}Requests: response = requests.get(url=url, headers=headers)Urllib2: import urllib, urllib2req = urllib2.Request(url=url, headers=headers)response = urllib 2.urlopen(req)4. 关于断开和重新连接就不多说了。def multi_session(session, *arg):retryTimes = 20 而 retryTimes>0:try:return session.post(*arg)except:print'.',
5.多进程爬取这里是基于华尔街知识的并行爬取实验对比:Python多进程爬取和Java单线程和多线程爬取相关参考:多进程和多线程的比较Python和Java之间的计算方法6. 对于Ajax请求的处理,对于“加载更多”的情况,Ajax是用来传输大量数据的。它的工作原理是:从网页的url中加载网页的源代码后,JavaScript程序就会在浏览器中执行。这些程序将加载更多内容并“填充”网页。这就是为什么如果你直接去爬取页面本身的url,你将找不到页面的实际内容。这里,如果使用谷歌浏览器分析“请求”对应的链接(方法:右键→评论元素→网络→清除,点击“加载更多”,会出现对应的GET链接,找到类型text/html,点击即可查看get参数或者复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。右键→查看元素→网络→清除,点击“加载更多”,会出现对应的GET链接,查找类型为text/html,点击查看获取参数或复制Request URL),循环过程。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。如果在“请求”之前有页面,则根据上一步的 URL 分析导出页面 1。以此类推,抓取Ajax地址的数据。对返回的json格式数据(str)进行正则匹配。在json格式数据中,需要将'\uxxxx'形式的unicode_escape编码转换为u'\uxxxx'的unicode编码。7. 自动化测试工具 SeleniumSelenium 是一个自动化测试工具。
它可以对浏览器进行操作,包括字符填充、鼠标点击、获取元素、页面切换等一系列操作。简而言之,Selenium 可以做浏览器可以做的一切。下面是使用selenium动态获取给定城市列表后去哪儿网票价信息的代码。参考项目:网络爬虫Selenium 使用代理登录:爬取去哪儿网站8. 验证码识别 对于有验证码的网站,我们有三种方法:使用代理和更新IP。使用cookie登录。识别码。前面已经讲过使用proxy和使用cookie登录了,再来说说验证码识别。可以使用开源的Tesseract-OCR系统下载和识别验证码图片,并将识别出的字符传送到履带系统进行模拟着陆。当然,验证码图片也可以上传到编码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。验证码图片也可以上传到打码平台进行识别。如果不成功,您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。您可以再次更新验证码标识,直到成功。参考项目:Captcha1爬取有两个需要注意的问题:如何监控一系列网站的更新状态,即如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。如何进行增量爬取?海量数据如何实现分布式爬取?分析完爬取后,就是分析爬取的内容。你需要什么内容,从中提取相关内容。常见的分析工具有正则表达式、BeautifulSoup、lxml等。存储分析完我们需要什么后,下一步就是存储。
我们可以选择将其保存在文本文件中,或者保存在 MySQL 或 MongoDB 数据库中。存储中需要注意两个问题: 如何去重网页?内容以什么形式存储?ScrapyScrapy 是一个基于 Twisted 的开源 Python 爬虫框架,业界广泛使用。相关内容请参考基于Scrapy的网络爬虫构建。同时将本文介绍的微信搜索爬取的项目代码提供给大家,作为学习的参考。参考项目:使用Scrapy或Requests递归抓取微信搜索结果
现在下载
网页爬虫抓取百度图片( 利用Python第三方库请求库requests和解析库lxml等工具)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-12-26 16:14
利用Python第三方库请求库requests和解析库lxml等工具)
从爬虫小程序爬取百度贴吧图片
使用Python第三方库请求库请求和解析库lxml等工具抓取百度贴吧名下的所有图片:
要求如下:
1、。编程范式------面向对象
2、 采取简单的反爬措施:比如请求时间不要太频繁,请求头中的User-Agent应该隐藏爬虫工具,随机生成User-Agent,避免反爬
3、只抓取楼主发的图片,其他图片不允许抓取
代码如下:
import requests
from lxml import etree
import os
import time
from fake_useragent import UserAgent
import warnings
import random
warnings.filterwarnings('ignore')
class BaiduSpider(object):
def __init__(self, keyword, page_number):
self.url = 'http://tieba.baidu.com/'
self.useragent = UserAgent()
self.headers = {'User-Agent': self.useragent.random}
self.keyword = keyword
self.page_number = page_number
# 获取帖子链接
def get_tlink(self, data):
res = requests.get(self.url, headers=self.headers, params=data)
res.encoding = 'utf-8'
html = res.text
html = html.replace(r"", '')
# print(html)
parse_html = etree.HTML(html)
t_list = parse_html.xpath(
'//ul[@id="thread_list"]/li[@class=" j_thread_list clearfix"]/div//a/@href')
# print(t_list)
for t in t_list:
# 拼接每个帖子的链接
t_link = 'http://tieba.baidu.com' + t
# 向帖子链接发请求,获取图片链接,向图片链接发请求,保存图片到本地
# print(t_link)
self.get_ilink(t_link)
# 提取图片链接
def get_ilink(self, t_link):
res = requests.get(t_link, headers=self.headers)
res.encoding = 'utf-8'
html = res.text
parse_html = etree.HTML(html)
i_list = parse_html.xpath(
'//div[@class="d_post_content_main d_post_content_firstfloor"]//div[@class="d_post_content j_d_post_content clearfix"]/img[@class="BDE_Image"]/@src')
print(i_list)
for i in i_list:
html = requests.get(i, heasers=self.headers).content
self.write_image(html, i)
# 保存图片
def write_image(self, html, i):
filename = './' + self.keyword + '/' + i[-10:]
with open(filename, 'wb') as f:
f.write(html)
def main(self):
if os.path.exists(self.keyword):
os.remove(self.keyword)
for i in range(1, self.page_number + 1):
data = {
'kw': self.keyword,
'pn': str((i - 1) * 50)
}
self.get_tlink(data)
print('第%d页下载完毕' % i)
time.sleep(random.randint(1, 10))
if __name__ == "__main__":
spider = BaiduSpider('高考吧', 1)
spider.main()
posted @ 2019-06-26 19:39 阅读年轻(327)评论(0)编辑 查看全部
网页爬虫抓取百度图片(
利用Python第三方库请求库requests和解析库lxml等工具)
从爬虫小程序爬取百度贴吧图片
使用Python第三方库请求库请求和解析库lxml等工具抓取百度贴吧名下的所有图片:
要求如下:
1、。编程范式------面向对象
2、 采取简单的反爬措施:比如请求时间不要太频繁,请求头中的User-Agent应该隐藏爬虫工具,随机生成User-Agent,避免反爬
3、只抓取楼主发的图片,其他图片不允许抓取
代码如下:
import requests
from lxml import etree
import os
import time
from fake_useragent import UserAgent
import warnings
import random
warnings.filterwarnings('ignore')
class BaiduSpider(object):
def __init__(self, keyword, page_number):
self.url = 'http://tieba.baidu.com/'
self.useragent = UserAgent()
self.headers = {'User-Agent': self.useragent.random}
self.keyword = keyword
self.page_number = page_number
# 获取帖子链接
def get_tlink(self, data):
res = requests.get(self.url, headers=self.headers, params=data)
res.encoding = 'utf-8'
html = res.text
html = html.replace(r"", '')
# print(html)
parse_html = etree.HTML(html)
t_list = parse_html.xpath(
'//ul[@id="thread_list"]/li[@class=" j_thread_list clearfix"]/div//a/@href')
# print(t_list)
for t in t_list:
# 拼接每个帖子的链接
t_link = 'http://tieba.baidu.com' + t
# 向帖子链接发请求,获取图片链接,向图片链接发请求,保存图片到本地
# print(t_link)
self.get_ilink(t_link)
# 提取图片链接
def get_ilink(self, t_link):
res = requests.get(t_link, headers=self.headers)
res.encoding = 'utf-8'
html = res.text
parse_html = etree.HTML(html)
i_list = parse_html.xpath(
'//div[@class="d_post_content_main d_post_content_firstfloor"]//div[@class="d_post_content j_d_post_content clearfix"]/img[@class="BDE_Image"]/@src')
print(i_list)
for i in i_list:
html = requests.get(i, heasers=self.headers).content
self.write_image(html, i)
# 保存图片
def write_image(self, html, i):
filename = './' + self.keyword + '/' + i[-10:]
with open(filename, 'wb') as f:
f.write(html)
def main(self):
if os.path.exists(self.keyword):
os.remove(self.keyword)
for i in range(1, self.page_number + 1):
data = {
'kw': self.keyword,
'pn': str((i - 1) * 50)
}
self.get_tlink(data)
print('第%d页下载完毕' % i)
time.sleep(random.randint(1, 10))
if __name__ == "__main__":
spider = BaiduSpider('高考吧', 1)
spider.main()
posted @ 2019-06-26 19:39 阅读年轻(327)评论(0)编辑
网页爬虫抓取百度图片(什么是爬虫网络爬虫(一)_百度百科_光明网)
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2021-12-25 10:15
什么是爬虫
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。其他不太常用的名称包括蚂蚁、自动索引、模拟器或蠕虫。(来源:百度百科)
爬虫协议
机器人协议(也称为爬虫协议、机器人协议等)代表“机器人排除协议”(Robots Exclusion Protocol)。该网站使用Robots协议来告诉搜索引擎哪些页面可以被抓取,哪些页面不能被抓取。
robots.txt 文件是一个文本文件。您可以使用任何常用的文本编辑器(例如 Windows 附带的记事本)来创建和编辑它。robots.txt 是一个协议,而不是一个命令。robots.txt 是搜索引擎访问网站时要查看的第一个文件。robots.txt 文件告诉蜘蛛可以在服务器上查看哪些文件。(来源:百度百科)
爬虫百度图片
目标:抓取百度的图片并保存在电脑上。它们可以被抓取吗?
首先,数据是否公开?可以下载吗?
从图中可以看出,百度的图片是完全可以下载的,也就是说可以先抓取图片来抓取图片
首先要明白什么是图片?我们看到,有形式的事物是图片、照片、拓片等的统称。图片是技术绘图中的基本术语。它是指用点、线、符号、字符和数字来描述事物的几何特征、形状、位置和大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。
那么需要的图片在哪里呢?图片保存在云服务器的数据库中
每张图片都有一个对应的网址。通过requests模块发起请求,文件保存在wb+方法中。进口请求
r = requests.get('#39;)
with open('demo.jpg','wb+') as f:
f.write(r.content) 批量爬取,但是谁写代码为了爬取一张图片,还是直接下载比较好。爬虫的目的是为了达到批量下载的目的,这是真实爬虫网站的分析
首先了解jsonJSON(JavaScript Object Notation,JS Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会开发的 js 规范)的一个子集,并使用完全独立于编程语言的文本格式来存储和表示数据。简洁明了的层次结构使 JSON 成为一种理想的数据交换语言。
json是js的对象,用来访问数据的JSON字符串{
"名称": "毛利人",
“年龄”:18,
《特征》:[‘高’、‘富’、‘帅’]
}Python字典{
'name':'毛利人',
“年龄”:18
'特征':['高','富','帅']
但是在python中不能直接通过key-value对获取值,所以不得不说python中的字典在python中导入json,通过json.loads(s) --> 将json数据转换成python数据(字典) ajax 的使用 Ajax,或“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种用于创建交互式 Web 应用程序的 Web 开发技术。
图片是通过ajax方法加载的,也就是我下拉的时候,图片会自动加载,因为网站自动发起请求,分析图片url链接的位置,找到ajax请求对应的url来构造ajax url请求,json转成字典,通过字典的键值对获取value,获取图片对应的url导入请求
导入json
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
r = requests.get('%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=% E5 %9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=',headers = headers).text
res = json.loads(r)['数据']
对于索引,我在 enumerate(res) 中:
url = i['hoverURL']
打印(网址)
with open('{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content) 构造json的url,不断爬取图片。一个json里面有30张图片,所以当我们发起一个json请求的时候,可以抓取30张图片,但是还是不够。
首先分析不同json%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=发起的请求%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&55=
%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7 % 89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=
其实可以发现,再次发起请求的时候,关键是pn在不断变化
最后封装一下代码,一个list定义生产者存储连续生成的图片url,另一个list定义consumer存储图片# -*- coding: utf-8 -*-
# 时间:2019/6/20 17:07
#作者:毛利
进口请求
导入json
导入操作系统
def get_pic_url(num):
pic_url= []
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
对于范围内的我(数量):
page_url ='%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B% BE %E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&90='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['数据']
如果资源:
打印(资源)
对于 res 中的 j:
尝试:
url = j['hoverURL']
pic_url.append(url)
除了:
print('图片的url不存在')
打印(len(pic_url))
返回 pic_url
def down_img(num):
pic_url =get_pic_url(num)
如果 os.path.exists('D:\picture'):
经过
别的:
os.makedirs('D:\图片')
路径='D:\图片\\'
对于索引,我在枚举(pic_url)中:
文件名 = 路径 + str(index) +'.jpg'
打印(文件名)
with open(filename,'wb+') as f:
f.write(requests.get(i).content)
如果 __name__ =='__main__':
num = int(input('抓取多张图片:一次30张图片'))
down_img(数量)
爬行过程
抓取结果
该文章最初发表于: 查看全部
网页爬虫抓取百度图片(什么是爬虫网络爬虫(一)_百度百科_光明网)
什么是爬虫
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。其他不太常用的名称包括蚂蚁、自动索引、模拟器或蠕虫。(来源:百度百科)
爬虫协议
机器人协议(也称为爬虫协议、机器人协议等)代表“机器人排除协议”(Robots Exclusion Protocol)。该网站使用Robots协议来告诉搜索引擎哪些页面可以被抓取,哪些页面不能被抓取。
robots.txt 文件是一个文本文件。您可以使用任何常用的文本编辑器(例如 Windows 附带的记事本)来创建和编辑它。robots.txt 是一个协议,而不是一个命令。robots.txt 是搜索引擎访问网站时要查看的第一个文件。robots.txt 文件告诉蜘蛛可以在服务器上查看哪些文件。(来源:百度百科)
爬虫百度图片
目标:抓取百度的图片并保存在电脑上。它们可以被抓取吗?
首先,数据是否公开?可以下载吗?
从图中可以看出,百度的图片是完全可以下载的,也就是说可以先抓取图片来抓取图片
首先要明白什么是图片?我们看到,有形式的事物是图片、照片、拓片等的统称。图片是技术绘图中的基本术语。它是指用点、线、符号、字符和数字来描述事物的几何特征、形状、位置和大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。
那么需要的图片在哪里呢?图片保存在云服务器的数据库中
每张图片都有一个对应的网址。通过requests模块发起请求,文件保存在wb+方法中。进口请求
r = requests.get('#39;)
with open('demo.jpg','wb+') as f:
f.write(r.content) 批量爬取,但是谁写代码为了爬取一张图片,还是直接下载比较好。爬虫的目的是为了达到批量下载的目的,这是真实爬虫网站的分析
首先了解jsonJSON(JavaScript Object Notation,JS Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会开发的 js 规范)的一个子集,并使用完全独立于编程语言的文本格式来存储和表示数据。简洁明了的层次结构使 JSON 成为一种理想的数据交换语言。
json是js的对象,用来访问数据的JSON字符串{
"名称": "毛利人",
“年龄”:18,
《特征》:[‘高’、‘富’、‘帅’]
}Python字典{
'name':'毛利人',
“年龄”:18
'特征':['高','富','帅']
但是在python中不能直接通过key-value对获取值,所以不得不说python中的字典在python中导入json,通过json.loads(s) --> 将json数据转换成python数据(字典) ajax 的使用 Ajax,或“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种用于创建交互式 Web 应用程序的 Web 开发技术。
图片是通过ajax方法加载的,也就是我下拉的时候,图片会自动加载,因为网站自动发起请求,分析图片url链接的位置,找到ajax请求对应的url来构造ajax url请求,json转成字典,通过字典的键值对获取value,获取图片对应的url导入请求
导入json
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
r = requests.get('%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=% E5 %9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=',headers = headers).text
res = json.loads(r)['数据']
对于索引,我在 enumerate(res) 中:
url = i['hoverURL']
打印(网址)
with open('{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content) 构造json的url,不断爬取图片。一个json里面有30张图片,所以当我们发起一个json请求的时候,可以抓取30张图片,但是还是不够。
首先分析不同json%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=发起的请求%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&55=
%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7 % 89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=
其实可以发现,再次发起请求的时候,关键是pn在不断变化
最后封装一下代码,一个list定义生产者存储连续生成的图片url,另一个list定义consumer存储图片# -*- coding: utf-8 -*-
# 时间:2019/6/20 17:07
#作者:毛利
进口请求
导入json
导入操作系统
def get_pic_url(num):
pic_url= []
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
对于范围内的我(数量):
page_url ='%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B% BE %E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&90='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['数据']
如果资源:
打印(资源)
对于 res 中的 j:
尝试:
url = j['hoverURL']
pic_url.append(url)
除了:
print('图片的url不存在')
打印(len(pic_url))
返回 pic_url
def down_img(num):
pic_url =get_pic_url(num)
如果 os.path.exists('D:\picture'):
经过
别的:
os.makedirs('D:\图片')
路径='D:\图片\\'
对于索引,我在枚举(pic_url)中:
文件名 = 路径 + str(index) +'.jpg'
打印(文件名)
with open(filename,'wb+') as f:
f.write(requests.get(i).content)
如果 __name__ =='__main__':
num = int(input('抓取多张图片:一次30张图片'))
down_img(数量)
爬行过程
抓取结果
该文章最初发表于:
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2021-12-25 10:12
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片 查看全部
网页爬虫抓取百度图片(记录一下本次代码的坑点代码实现架构(图))
免责声明:如需转载本文,请私聊并在文章开头注明出处。本代码未经授权不得用于获取商业价值,否则后果自负。
这次的需求大概是从百度图片中抓取任意分类图片。考虑到有些图片的资源不是很好,而且因为百度搜索的相关性会越来越低,所以我会要求每个类别要爬取的数据量控制在600,实际爬下来,每个类别是约500张图片。
实现架构
我们来看看这段代码的实现架构:
我们来看看main方法:
package mainmethon;
import httpbrowser.CreateUrl;
import savefile.ImageFile;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by hg_yi on 17-5-16.
*
* 测试数据:image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=bird&
*
* 在多线程进行下载时,需要向线程中传递参数,此时有三种方法,我选择的第一种,设计构造器
*/
public class major {
public static void main(String[] args) {
int sum = 0;
List urlMains = new ArrayList();
List imageUrls = new ArrayList();
//首先得到10个页面
urlMains = CreateUrl.CreateMainUrl();
out.println(urlMains.size());
for(String urlMain : urlMains) {
out.println(urlMain);
}
//使用Jsoup和FastJson解析出所有的图片源链接
imageUrls = CreateUrl.CreateImageUrl(urlMains);
for(String imageUrl : imageUrls) {
out.println(imageUrl);
}
//先创建出每个图片所属的文件夹
ImageFile.createDir();
int average = imageUrls.size()/10;
//对图片源链接进行下载(使用多线程进行下载)创建进程
for(int i = 0; i < 10; i++){
int begin = sum;
sum += average;
int last = sum;
Thread image = null;
if(i < 9) {
image = new Thread(new ImageFile(begin, last,
(ArrayList) imageUrls));
} else {
image = new Thread(new ImageFile(begin, imageUrls.size(),
(ArrayList) imageUrls));
}
image.start();
}
}
}
main方法中各个方法的解释已经很清楚了,这里不再赘述。
记录这段代码的坑
对于这段代码的实现,修复bug时间最长的是这段代码:
try {
URL url = new URL(imageUrls.get(i));
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
conn.connect();
inputStream = conn.getInputStream();
} catch (Exception e) {
continue;
}
这段代码的主要作用是下载图片,请求图片的源地址,然后作为输入流使用。在执行超时设置和异常处理之前,将执行链接超时和读取超时错误。,我当时也是用httpclient重写的,结果还是报错。最后,使用超时设置。如果在该时间段内没有进行URL请求,则进行下一个URL请求,直接放弃该请求。本来打算爬600张图片,最后只能爬500张,原因就在这里。
源码链接
使用多线程抓取百度图片
网页爬虫抓取百度图片( 谷歌浏览器的查找功能发现图片的链接保存在页面源代码中)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2021-12-25 10:09
谷歌浏览器的查找功能发现图片的链接保存在页面源代码中)
Python爬虫之四(百度图片爬取)
我们在观察百度图片的时候,发现他的图片好像没完没了,一直可以下拉。然后我们观察他的网页,发现刷新和下拉开始的时候源代码不一样,增加了一些内容。通过谷歌浏览器的搜索功能找到的图片链接保存在这些新添加的代码中。这是异步加载。需要的内容不是直接在页面源码中,而是一次又一次的加载。
1、查看网络->下拉加载更多图片,发现加载文件很多,选择XRL文件,每三十张图片加载一个XRL文件。
2、选择Headers看到一个Request URL链接,可以用浏览器打开,就是加载的XRL文件的内容,但是比较乱,不方便观察(也可以点击Response,就是他的内容,和用浏览器打开是一样的)。您也可以单击它旁边的 Preivew。这个界面是一个XRL文件,但是已经像网页的源代码一样进行了整理,更容易观察。点击后可以观察内容,链接很多。
如下图,一共有30个,每个都收录
一张图片,然后我们需要找到它们的链接。
看了很多别人的博客,知道页面上有四种图片链接,middleURL、hoverURL、thumbURL、objURL。其中objURL(不是ObjURL)是原图,我们也下载了这个。
那么就该写代码了,只需要说两件事:
1、params,观察每个XRL文件的Query String Parameters,你会发现它和XRL链接是一样的,而且每个都有几个不同的字段,然后你可以发现pn是第一页* 30,gsm是pn十六进制数。我不知道最后一串数字是什么,但似乎没有关系,所以我构造了一个函数来获取图像链接资源。
2、找到objURL链接。有了XRL文件,可以直接用正则表达式匹配:'objURL":"(.*?)",'。然后我们发现是乱码,但是其他的链接是可以下载的。我试过thumbURL,然后下载也很好,正常,但是为什么objURL会这样呢?
objURL:"ippr_z2C$qAzdH3FAzdH3Ft_z&e3B8080nv1g_z&e3Bv54AzdH3FduigehAzdH3FYWxqwGBuAzdH3Fv4fnAzdH3F1xskerTk54vg3B&
因为他是加密的(不明白为什么其他博客好像没有这个问题,可能以前没有),看到一个博客解析百度objURL
然后下面是所有的代码
参考了几篇博客,比我的详细(我太懒了)
1
2
3
4
一些反爬虫问题
关于标头(UA、referer、cookies)
爬虫实战7-对抗爬虫的对策
关于反爬行动物的一些结论
之前爬取的图片无法下载,一直403禁止访问,只是因为没有添加referer
'推荐人':'#39; 查看全部
网页爬虫抓取百度图片(
谷歌浏览器的查找功能发现图片的链接保存在页面源代码中)
Python爬虫之四(百度图片爬取)
我们在观察百度图片的时候,发现他的图片好像没完没了,一直可以下拉。然后我们观察他的网页,发现刷新和下拉开始的时候源代码不一样,增加了一些内容。通过谷歌浏览器的搜索功能找到的图片链接保存在这些新添加的代码中。这是异步加载。需要的内容不是直接在页面源码中,而是一次又一次的加载。
1、查看网络->下拉加载更多图片,发现加载文件很多,选择XRL文件,每三十张图片加载一个XRL文件。
2、选择Headers看到一个Request URL链接,可以用浏览器打开,就是加载的XRL文件的内容,但是比较乱,不方便观察(也可以点击Response,就是他的内容,和用浏览器打开是一样的)。您也可以单击它旁边的 Preivew。这个界面是一个XRL文件,但是已经像网页的源代码一样进行了整理,更容易观察。点击后可以观察内容,链接很多。

如下图,一共有30个,每个都收录
一张图片,然后我们需要找到它们的链接。

看了很多别人的博客,知道页面上有四种图片链接,middleURL、hoverURL、thumbURL、objURL。其中objURL(不是ObjURL)是原图,我们也下载了这个。
那么就该写代码了,只需要说两件事:
1、params,观察每个XRL文件的Query String Parameters,你会发现它和XRL链接是一样的,而且每个都有几个不同的字段,然后你可以发现pn是第一页* 30,gsm是pn十六进制数。我不知道最后一串数字是什么,但似乎没有关系,所以我构造了一个函数来获取图像链接资源。

2、找到objURL链接。有了XRL文件,可以直接用正则表达式匹配:'objURL":"(.*?)",'。然后我们发现是乱码,但是其他的链接是可以下载的。我试过thumbURL,然后下载也很好,正常,但是为什么objURL会这样呢?
objURL:"ippr_z2C$qAzdH3FAzdH3Ft_z&e3B8080nv1g_z&e3Bv54AzdH3FduigehAzdH3FYWxqwGBuAzdH3Fv4fnAzdH3F1xskerTk54vg3B&
因为他是加密的(不明白为什么其他博客好像没有这个问题,可能以前没有),看到一个博客解析百度objURL
然后下面是所有的代码
参考了几篇博客,比我的详细(我太懒了)
1
2
3
4
一些反爬虫问题
关于标头(UA、referer、cookies)
爬虫实战7-对抗爬虫的对策
关于反爬行动物的一些结论
之前爬取的图片无法下载,一直403禁止访问,只是因为没有添加referer
'推荐人':'#39;
网页爬虫抓取百度图片( 搜索引擎爬虫着陆页质量检测爬虫百度爬虫算法优秀)
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2021-12-25 07:14
搜索引擎爬虫着陆页质量检测爬虫百度爬虫算法优秀)
什么是搜索引擎爬虫?
搜索引擎爬虫又称网络蜘蛛、网络机器人,英文名称:Spider,是一种按照一定的规则自动抓取万维网上信息的程序或脚本。
爬虫爬取过程:
首先,从互联网页面中选择一些页面,将这些页面链接地址作为种子URL,将这些种子URL放入URL队列中进行爬取。爬虫依次从待爬取的URL队列中读取,通过DNS解析URL。将链接地址转换为网站服务器对应的IP地址。给它和网页的相对路径名给网页下载器,网页下载器负责下载页面的内容。下载到本地页面,一方面存储在页面库中,等待索引等待后续处理;另一方面,将下载页面的URL放入已爬取的URL队列,记录爬虫系统已经下载过的网页URL,避免重复抓取网页。对于新下载的网页,提取其中收录的所有链接信息,并在抓取的URL队列中进行检查。如果发现该链接没有被抓取,则将该URL放在待抓取的URL队列的末尾,然后在抓取调度中下载该URL对应的网页。这样就形成了一个循环,直到对待爬取的URL队列进行审核,这意味着爬虫系统已经爬取了所有可以爬取的网页,此时完成了一轮完整的爬取过程。
常见爬虫:
谷歌爬虫
算法优秀,反应快,对内容质量的把握极佳,爬虫程序中等强度,服务器负担小,推广效果好。
对应的user-agent:爬虫名称
Googlebot:谷歌网络爬虫
Googlebot-news:谷歌新闻抓取工具
Googlebot-image:谷歌图片抓取工具
Googlebot-video:谷歌视频抓取工具
Googlebot-mobile:谷歌移动爬虫
Mediapartners-google 或 Mediapartners(googlebot):谷歌广告爬虫
Adsbot-google:Google 着陆页质量检查爬虫
百度爬虫
算法好,响应速度慢,内容质量一般,高强度爬虫程序,由于算法优化不好,服务器负担大,本身存在很多小问题,隐私保护穷,在百度面前毫无隐私可言。推广效果不错。
对应的user-agent:爬虫名称
百度蜘蛛:百度网络爬虫和移动爬虫
baiduspider-image:百度图片爬虫
百度蜘蛛视频:百度视频爬虫
百度蜘蛛新闻:百度新闻爬虫
百度蜘蛛最爱:百度手藏爬虫
百度蜘蛛-cpro:百度联盟爬虫
百度蜘蛛-广告:百度业务爬虫
不错的搜索爬虫
对应的user-agent:爬虫名称
360spider 或 haosouspider:不错的搜索网络爬虫和移动爬虫
360spider-image:不错的搜索图片爬虫
360spider-video:好搜视频爬虫
搜狗爬虫
算法不好,响应速度极慢,无法很好把握内容质量。高强度的爬虫程序会因为算法的奇数错误而对页面进行大量重复且无意义的扫描。整体性价比非常低。
对应的user-agent:爬虫名称
搜狗蜘蛛:搜狗综合爬虫
新浪爱问爬虫
对应的user-agent:爬虫名称
Iaskspider:新浪爱问爬虫
有道爬虫
对应的user-agent:爬虫名称
YodaoBot:网易有道爬虫
Alexa爬虫
对应的user-agent:爬虫名称
ia_archiver:Alexa 爬虫
雅虎爬行动物
对应的user-agent:爬虫名称
雅虎!Slurp:雅虎爬虫
必应爬虫
对应的user-agent:爬虫名称
Bingbot:必应爬虫
网站建筑是如何吸引蜘蛛抓取网站的内容的?
1、网站和页面的权重仍然作为衡量网站价值的重要标准。优质老手网站被百度评为高权重。这种网站页面被蜘蛛爬取的概率比较高,所以很多内部页面都会收录。
2、 页面更新的频率会直接影响蜘蛛的访问频率。蜘蛛每次访问服务器时都会保存获取的页面数据。如果页面内容与下次存储的数据相同,蜘蛛会认为该页面不会频繁更新,然后优先网站来决定以后访问的时间和频率。如果网站的内容更新频繁,而蜘蛛每次抓取的内容都不一样,那么蜘蛛会更频繁地访问这类页面,页面上出现的新链接自然会被抓取< @收录。
3、 引导链接的建立,无论网站的外链还是内链,想要被蜘蛛抓取,都必须有引导链接才能进入页面。因此,内部链接的合理建立非常重要,否则蜘蛛无法发现页面的存在。导入高质量的外链也很重要,会增加蜘蛛跟踪爬行的深度。
4、 建立首页的引导链接。蜘蛛最常访问的是主页。有内容更新时,一定要反映在首页,建立链接,方便蜘蛛最快抓取,增加抓取机会。
5、原创 内容,蜘蛛最厉害的就是将新发布的内容与服务器收录的数据进行对比,如果是抄袭或部分修改,则不是原创伪原创的内容,百度不会收录,如果频繁发布非原创的内容,那么也会减少蜘蛛访问的频率,严重的不直接收录@ > , 偶数 0收录。
网站 对蜘蛛不友好的因素:
1、robots.txt 文件、2、nofollow 标签、3、flash、4、 图片、5、JavaScript、6、网站 导览权限,
7、强制使用cookies,8、HTTP返回码,9、服务器,10、域名解析,11、网站完整程序, 12、动态网址,
13、帧结构,14、会话id 查看全部
网页爬虫抓取百度图片(
搜索引擎爬虫着陆页质量检测爬虫百度爬虫算法优秀)
什么是搜索引擎爬虫?
搜索引擎爬虫又称网络蜘蛛、网络机器人,英文名称:Spider,是一种按照一定的规则自动抓取万维网上信息的程序或脚本。
爬虫爬取过程:
首先,从互联网页面中选择一些页面,将这些页面链接地址作为种子URL,将这些种子URL放入URL队列中进行爬取。爬虫依次从待爬取的URL队列中读取,通过DNS解析URL。将链接地址转换为网站服务器对应的IP地址。给它和网页的相对路径名给网页下载器,网页下载器负责下载页面的内容。下载到本地页面,一方面存储在页面库中,等待索引等待后续处理;另一方面,将下载页面的URL放入已爬取的URL队列,记录爬虫系统已经下载过的网页URL,避免重复抓取网页。对于新下载的网页,提取其中收录的所有链接信息,并在抓取的URL队列中进行检查。如果发现该链接没有被抓取,则将该URL放在待抓取的URL队列的末尾,然后在抓取调度中下载该URL对应的网页。这样就形成了一个循环,直到对待爬取的URL队列进行审核,这意味着爬虫系统已经爬取了所有可以爬取的网页,此时完成了一轮完整的爬取过程。
常见爬虫:
谷歌爬虫
算法优秀,反应快,对内容质量的把握极佳,爬虫程序中等强度,服务器负担小,推广效果好。
对应的user-agent:爬虫名称
Googlebot:谷歌网络爬虫
Googlebot-news:谷歌新闻抓取工具
Googlebot-image:谷歌图片抓取工具
Googlebot-video:谷歌视频抓取工具
Googlebot-mobile:谷歌移动爬虫
Mediapartners-google 或 Mediapartners(googlebot):谷歌广告爬虫
Adsbot-google:Google 着陆页质量检查爬虫
百度爬虫
算法好,响应速度慢,内容质量一般,高强度爬虫程序,由于算法优化不好,服务器负担大,本身存在很多小问题,隐私保护穷,在百度面前毫无隐私可言。推广效果不错。
对应的user-agent:爬虫名称
百度蜘蛛:百度网络爬虫和移动爬虫
baiduspider-image:百度图片爬虫
百度蜘蛛视频:百度视频爬虫
百度蜘蛛新闻:百度新闻爬虫
百度蜘蛛最爱:百度手藏爬虫
百度蜘蛛-cpro:百度联盟爬虫
百度蜘蛛-广告:百度业务爬虫
不错的搜索爬虫
对应的user-agent:爬虫名称
360spider 或 haosouspider:不错的搜索网络爬虫和移动爬虫
360spider-image:不错的搜索图片爬虫
360spider-video:好搜视频爬虫
搜狗爬虫
算法不好,响应速度极慢,无法很好把握内容质量。高强度的爬虫程序会因为算法的奇数错误而对页面进行大量重复且无意义的扫描。整体性价比非常低。
对应的user-agent:爬虫名称
搜狗蜘蛛:搜狗综合爬虫
新浪爱问爬虫
对应的user-agent:爬虫名称
Iaskspider:新浪爱问爬虫
有道爬虫
对应的user-agent:爬虫名称
YodaoBot:网易有道爬虫
Alexa爬虫
对应的user-agent:爬虫名称
ia_archiver:Alexa 爬虫
雅虎爬行动物
对应的user-agent:爬虫名称
雅虎!Slurp:雅虎爬虫
必应爬虫
对应的user-agent:爬虫名称
Bingbot:必应爬虫
网站建筑是如何吸引蜘蛛抓取网站的内容的?
1、网站和页面的权重仍然作为衡量网站价值的重要标准。优质老手网站被百度评为高权重。这种网站页面被蜘蛛爬取的概率比较高,所以很多内部页面都会收录。
2、 页面更新的频率会直接影响蜘蛛的访问频率。蜘蛛每次访问服务器时都会保存获取的页面数据。如果页面内容与下次存储的数据相同,蜘蛛会认为该页面不会频繁更新,然后优先网站来决定以后访问的时间和频率。如果网站的内容更新频繁,而蜘蛛每次抓取的内容都不一样,那么蜘蛛会更频繁地访问这类页面,页面上出现的新链接自然会被抓取< @收录。
3、 引导链接的建立,无论网站的外链还是内链,想要被蜘蛛抓取,都必须有引导链接才能进入页面。因此,内部链接的合理建立非常重要,否则蜘蛛无法发现页面的存在。导入高质量的外链也很重要,会增加蜘蛛跟踪爬行的深度。
4、 建立首页的引导链接。蜘蛛最常访问的是主页。有内容更新时,一定要反映在首页,建立链接,方便蜘蛛最快抓取,增加抓取机会。
5、原创 内容,蜘蛛最厉害的就是将新发布的内容与服务器收录的数据进行对比,如果是抄袭或部分修改,则不是原创伪原创的内容,百度不会收录,如果频繁发布非原创的内容,那么也会减少蜘蛛访问的频率,严重的不直接收录@ > , 偶数 0收录。
网站 对蜘蛛不友好的因素:
1、robots.txt 文件、2、nofollow 标签、3、flash、4、 图片、5、JavaScript、6、网站 导览权限,
7、强制使用cookies,8、HTTP返回码,9、服务器,10、域名解析,11、网站完整程序, 12、动态网址,
13、帧结构,14、会话id
网页爬虫抓取百度图片( 老鱼网15小时前是百度爬虫页面自动繁殖泛目录程序)
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-12-24 15:05
老鱼网15小时前是百度爬虫页面自动繁殖泛目录程序)
百度爬虫页面自动SEO培育程序源码+教程
老鱼网15小时前
这是一个自动复制百度爬虫页面的泛目录程序。有视频教程
1、 只需采集关键词,无需更新任何文章,内容
2、 页面自动复制,自动SEO优化
3、 asp脚本伪静态无限生成
4、自动获取百度的关键词结果和标题
5、 根据关键词自动抓取百度搜索结果页的标题+摘要
6、 内链随机插入页面,站点地图随机调用300
7、 只需要旧域名,无灰历史,站点历史
8、 页面可读性强,搜狗效果更好,流量来得更快
百度爬虫页面自动SEO育种程序源码+教程下载:免费下载声明:禁止商业用途,仅供学习研究,商业使用风险自负!免费下载
上一篇:DediPath 在洛杉矶、圣何塞、西雅图和纽约的 VPS 主机上圣诞大减价 50%
下一篇:帝国cms仿玩网大型游戏资讯门户网站源码
转载声明:本站提供的资源均来自互联网,版权纠纷与本站无关。所有内容和软件文章仅用于学习和研究目的。以上内容不得用于商业或非法用途。否则,一切后果由用户负责。我们不保证内容的长期可用性。使用本网站内容所带来的风险与本网站无关。您必须在下载后 24 小时。在一个小时内,从您的电脑/手机中彻底删除上述内容。如果您喜欢本程序,请支持正版软件,购买并注册,获得更好的正版服务。请写信给E-mail:wwwlaoyuwang#(#=@) 查看全部
网页爬虫抓取百度图片(
老鱼网15小时前是百度爬虫页面自动繁殖泛目录程序)
百度爬虫页面自动SEO培育程序源码+教程
老鱼网15小时前
这是一个自动复制百度爬虫页面的泛目录程序。有视频教程
1、 只需采集关键词,无需更新任何文章,内容
2、 页面自动复制,自动SEO优化
3、 asp脚本伪静态无限生成
4、自动获取百度的关键词结果和标题
5、 根据关键词自动抓取百度搜索结果页的标题+摘要
6、 内链随机插入页面,站点地图随机调用300
7、 只需要旧域名,无灰历史,站点历史
8、 页面可读性强,搜狗效果更好,流量来得更快
百度爬虫页面自动SEO育种程序源码+教程下载:免费下载声明:禁止商业用途,仅供学习研究,商业使用风险自负!免费下载
上一篇:DediPath 在洛杉矶、圣何塞、西雅图和纽约的 VPS 主机上圣诞大减价 50%
下一篇:帝国cms仿玩网大型游戏资讯门户网站源码
转载声明:本站提供的资源均来自互联网,版权纠纷与本站无关。所有内容和软件文章仅用于学习和研究目的。以上内容不得用于商业或非法用途。否则,一切后果由用户负责。我们不保证内容的长期可用性。使用本网站内容所带来的风险与本网站无关。您必须在下载后 24 小时。在一个小时内,从您的电脑/手机中彻底删除上述内容。如果您喜欢本程序,请支持正版软件,购买并注册,获得更好的正版服务。请写信给E-mail:wwwlaoyuwang#(#=@)
网页爬虫抓取百度图片(保存新浪博客的历史文章备份到电脑本地,功能很强大 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2021-12-24 15:04
)
原因
想把新浪博客文章的历史备份到本地,用Puppeteer写个爬虫试试。
之前喜欢用Python3+Selenium,但是发现Puppeteer好像很容易安装,功能也很强大。
第一次使用Puppeteer,查了一些资料。
本文参考:从无头浏览器保存图像
本教程中的方法非常丰富,但是在爬取新浪博客的过程中,文章中的很多方法都遇到了障碍,最后发现并实践了一个更好的方法。
第一次尝试:node.js 直接请求下载文件
这是我自己的想法。最简单的方法就是拿到图片src后直接请求下载到本地。
const downloadFile = async (url, filePath) => {
return axios({
method: "get",
url: url,
responseType: "stream",
}).then((response) => {
response.data.pipe(fs.createWriteStream(filePath));
});
};
复制代码
通过axios下载保存图片失败,新浪退回图片,防止盗链。原理暂时不清楚。
看来我们需要想办法绕过它。
第二次尝试:从新的 Canvas 中提取图像
Extract Image from a New Canvas,这种方法是创建一个空白的canvas元素,将目标图片写入其中,然后将图片数据提取为DataURL。
如果图像数据来自不同的来源,这将导致画布被污染,并且试图从画布中获取图像数据将导致错误。
const getDataUrlThroughCanvas = async (selector) => {
// Create a new image element with unconstrained size.
const originalImage = document.querySelector(selector);
const image = document.createElement('img');
image.src = originalImage.src;
// Create a canvas and context to draw onto.
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = image.width;
canvas.height = image.height;
// Ensure the image is loaded.
await new Promise((resolve) => {
if (image.complete || (image.width) > 0) resolve();
image.addEventListener('load', () => resolve());
});
context.drawImage(image, 0, 0);
return canvas.toDataURL();
};
复制代码
我尝试过并将其重写为批处理选择器版本。运行后,由于跨域问题出现错误:Uncaught DOMException: Failed to execute'toDataURL' on'HTMLCanvasElement': Tainted canvases may not be export 它可以通过 image.setAttribute("crossOrigin",' 解决Anonymous'),但是又报跨域错误,解决失败。
第三次尝试:调用浏览器执行fetch方法下载图片
(Re-)Fetch the Image from the Server,这种方法是将JS代码注入浏览器执行,直接在浏览器层面进行操作。
const assert = require('assert');
const getDataUrlThroughFetch = async (selector, options = {}) => {
const image = document.querySelector(selector);
const url = image.src;
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`Could not fetch image, (status ${response.status}`);
}
const data = await response.blob();
const reader = new FileReader();
return new Promise((resolve) => {
reader.addEventListener('loadend', () => resolve(reader.result));
reader.readAsDataURL(data);
});
};
try {
const options = { cache: 'no-cache' };
const dataUrl = await page.evaluate(getDataUrlThroughFetch, '#svg', options);
const { mime, buffer } = parseDataUrl(dataUrl);
assert.equal(mime, 'image/svg+xml');
fs.writeFileSync('logo-fetch.svg', buffer, 'base64');
} catch (error) {
console.log(error);
}
复制代码
这种方法的实践也产生了错误。看了控制台的提示,也是因为跨域。
应该是新浪做了跨域限制。注入的JS不是新浪的,无法正常获取新浪的图片。
第四次尝试:通过Chromium的DevTools协议获取图片
使用DevTools协议提取图片,也就是说我们访问的是Puppeteer的api控制的浏览器。原理类似于我们F12打开开发者工具界面,在Sources中找到对应下载的图片。
const assert = require('assert');
const getImageContent = async (page, url) => {
const { content, base64Encoded } = await page._client.send(
'Page.getResourceContent',
{ frameId: String(page.mainFrame()._id), url },
);
assert.equal(base64Encoded, true);
return content;
};
try {
const url = await page.evaluate(() => document.querySelect('#svg').src)
const content = await getImageContent(page, url);
const contentBuffer = Buffer.from(content, 'base64');
fs.writeFileSync('logo-extracted.svg', contentBuffer, 'base64');
} catch (e) {
console.log(e);
}
复制代码
就这样,我也跑了,第一次看到图片被一张一张的下载到本地,很是欣慰。
但是这种方法有一定几率对图片内容造成损坏,出现绿色背景。我怀疑是因为看的时候图片没有下载完整,所以又放弃了。
第五次尝试:【原创终极方案】直接通过page.waitForResponse方法获取响应
结合第四次尝试中图片加载不完整的思考,基于对Puppeteer文档的查询,找到了那个教程中没有提到的方法:page.waitForResponse。
page.waitForResponse 方法是等待一个响应结束继续执行,并返回到 Puppeteer Response 实例。
使用示例:
const firstResponse = await page.waitForResponse('https://example.com/resource');
const finalResponse = await page.waitForResponse(response => response.url() === 'https://example.com' && response.status() === 200);
return finalResponse.ok();
复制代码
因此,我们在获取到图片的url后,可以直接使用该方法在浏览器中等待图片下载加载完毕,在加载后返回的Response对象中获取图片数据,更加简单高效比上一个教程中的方法。
const imgResp = await detailPage.waitForResponse(img.real_src, {
timeout: 10000,
});
const buffer = await imgResp.buffer();
const imgBase64 = buffer.toString("base64");
fs.writeFileSync(
`data/images/${index}_${img.index}.jpg`,
imgBase64,
"base64"
);
复制代码
对我来说,这是我发现并成功实践的最终和最推荐的解决方案。
踩了这么多坑,记录下来供大家参考。
查看全部
网页爬虫抓取百度图片(保存新浪博客的历史文章备份到电脑本地,功能很强大
)
原因
想把新浪博客文章的历史备份到本地,用Puppeteer写个爬虫试试。
之前喜欢用Python3+Selenium,但是发现Puppeteer好像很容易安装,功能也很强大。
第一次使用Puppeteer,查了一些资料。
本文参考:从无头浏览器保存图像
本教程中的方法非常丰富,但是在爬取新浪博客的过程中,文章中的很多方法都遇到了障碍,最后发现并实践了一个更好的方法。
第一次尝试:node.js 直接请求下载文件
这是我自己的想法。最简单的方法就是拿到图片src后直接请求下载到本地。
const downloadFile = async (url, filePath) => {
return axios({
method: "get",
url: url,
responseType: "stream",
}).then((response) => {
response.data.pipe(fs.createWriteStream(filePath));
});
};
复制代码
通过axios下载保存图片失败,新浪退回图片,防止盗链。原理暂时不清楚。
看来我们需要想办法绕过它。
第二次尝试:从新的 Canvas 中提取图像
Extract Image from a New Canvas,这种方法是创建一个空白的canvas元素,将目标图片写入其中,然后将图片数据提取为DataURL。
如果图像数据来自不同的来源,这将导致画布被污染,并且试图从画布中获取图像数据将导致错误。
const getDataUrlThroughCanvas = async (selector) => {
// Create a new image element with unconstrained size.
const originalImage = document.querySelector(selector);
const image = document.createElement('img');
image.src = originalImage.src;
// Create a canvas and context to draw onto.
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = image.width;
canvas.height = image.height;
// Ensure the image is loaded.
await new Promise((resolve) => {
if (image.complete || (image.width) > 0) resolve();
image.addEventListener('load', () => resolve());
});
context.drawImage(image, 0, 0);
return canvas.toDataURL();
};
复制代码
我尝试过并将其重写为批处理选择器版本。运行后,由于跨域问题出现错误:Uncaught DOMException: Failed to execute'toDataURL' on'HTMLCanvasElement': Tainted canvases may not be export 它可以通过 image.setAttribute("crossOrigin",' 解决Anonymous'),但是又报跨域错误,解决失败。
第三次尝试:调用浏览器执行fetch方法下载图片
(Re-)Fetch the Image from the Server,这种方法是将JS代码注入浏览器执行,直接在浏览器层面进行操作。
const assert = require('assert');
const getDataUrlThroughFetch = async (selector, options = {}) => {
const image = document.querySelector(selector);
const url = image.src;
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`Could not fetch image, (status ${response.status}`);
}
const data = await response.blob();
const reader = new FileReader();
return new Promise((resolve) => {
reader.addEventListener('loadend', () => resolve(reader.result));
reader.readAsDataURL(data);
});
};
try {
const options = { cache: 'no-cache' };
const dataUrl = await page.evaluate(getDataUrlThroughFetch, '#svg', options);
const { mime, buffer } = parseDataUrl(dataUrl);
assert.equal(mime, 'image/svg+xml');
fs.writeFileSync('logo-fetch.svg', buffer, 'base64');
} catch (error) {
console.log(error);
}
复制代码
这种方法的实践也产生了错误。看了控制台的提示,也是因为跨域。
应该是新浪做了跨域限制。注入的JS不是新浪的,无法正常获取新浪的图片。
第四次尝试:通过Chromium的DevTools协议获取图片
使用DevTools协议提取图片,也就是说我们访问的是Puppeteer的api控制的浏览器。原理类似于我们F12打开开发者工具界面,在Sources中找到对应下载的图片。
const assert = require('assert');
const getImageContent = async (page, url) => {
const { content, base64Encoded } = await page._client.send(
'Page.getResourceContent',
{ frameId: String(page.mainFrame()._id), url },
);
assert.equal(base64Encoded, true);
return content;
};
try {
const url = await page.evaluate(() => document.querySelect('#svg').src)
const content = await getImageContent(page, url);
const contentBuffer = Buffer.from(content, 'base64');
fs.writeFileSync('logo-extracted.svg', contentBuffer, 'base64');
} catch (e) {
console.log(e);
}
复制代码
就这样,我也跑了,第一次看到图片被一张一张的下载到本地,很是欣慰。
但是这种方法有一定几率对图片内容造成损坏,出现绿色背景。我怀疑是因为看的时候图片没有下载完整,所以又放弃了。
第五次尝试:【原创终极方案】直接通过page.waitForResponse方法获取响应
结合第四次尝试中图片加载不完整的思考,基于对Puppeteer文档的查询,找到了那个教程中没有提到的方法:page.waitForResponse。
page.waitForResponse 方法是等待一个响应结束继续执行,并返回到 Puppeteer Response 实例。
使用示例:
const firstResponse = await page.waitForResponse('https://example.com/resource');
const finalResponse = await page.waitForResponse(response => response.url() === 'https://example.com' && response.status() === 200);
return finalResponse.ok();
复制代码
因此,我们在获取到图片的url后,可以直接使用该方法在浏览器中等待图片下载加载完毕,在加载后返回的Response对象中获取图片数据,更加简单高效比上一个教程中的方法。
const imgResp = await detailPage.waitForResponse(img.real_src, {
timeout: 10000,
});
const buffer = await imgResp.buffer();
const imgBase64 = buffer.toString("base64");
fs.writeFileSync(
`data/images/${index}_${img.index}.jpg`,
imgBase64,
"base64"
);
复制代码
对我来说,这是我发现并成功实践的最终和最推荐的解决方案。
踩了这么多坑,记录下来供大家参考。
网页爬虫抓取百度图片(Python主要用来做什么应用?爬虫参考)
网站优化 • 优采云 发表了文章 • 0 个评论 • 36 次浏览 • 2021-12-22 14:10
本文文章将详细讲解python爬虫如何批量抓取百度图片。小编觉得很实用,分享给大家作为参考。希望大家看完这篇文章以后可以有所收获。
Python 主要用于什么
Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开发;6、桌面应用开发。
当我们要获取百度图片的时候,每张图片都要右击下载是很麻烦的。 python爬虫可以实现批量下载,根据我们的下载网站位置、图片位置、图片下载数量、图片下载位置等要求进行批量下载。
1、导入相关库
import requests#爬虫库
import re#正则表达式库
import os#系统库
import time#时间库
2、确定百度图片链接
url='http://image.baidu.com/search/ ... 3B%23百度链接
3、解码
# 解码def decode(url):
for key, value in str_table.items():
url = url.replace(key, value)
return url.translate(char_table)
4、百度图片下拉
def buildUrls(word):
word = urllib.parse.quote(word)
url = r"http://image.baidu.com/search/ ... fp%3D
result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word={word}&face=0&istype=2nc=1&pn={pn}&rn=60"
urls = (url.format(word=word, pn=x) for x in itertools.count(start=0, step=60))
return urls
re_url = re.compile(r'"objURL":"(.*?)"')
5、使用正则表达式获取图片数量
totalnum = re.findall('(.*?)', string)
print("百度图片"+totalnum[0])img_url_regex = '"thumbURL":"(.*?)",'#正则匹配式count=0#总共下载
的图片数index=0#链接后面的序号page=0#当前搜集的页while(1):
strhtml=requests.get(url+str(index),headers=headers)#get方式获取数据
string=str(strhtml.text)
print("已爬取网页")
6、使用正则表达式查找图片url
print("第"+str(page+1)+"页共收集到"+str(len(pic_url))+"张图片")
7、创建文件路径下载
def mkDir(dirName):
dirpath = os.path.join(sys.path[0], dirName)
if not os.path.exists(dirpath):
os.mkdir(dirpath)
return dirpathif __name__ == '__main__':
with open('list.txt', 'r', encoding="utf-8") as f:
result = f.read()
keys = result.split('\n')
key_words = list(enumerate(keys, start=1))
for key in key_words:
word = key[1]
dirpath = mkDir(word)
imgType = 'jpg'
strtag = word
numIMGS = 3
urls = buildUrls(word)
index = 0
#print("= = " * 25)
for url in urls:
print("正在请求:", url)
html = requests.get(url, timeout=10).content.decode('utf-8')
imgUrls = resolveImgUrl(html)
# print(imgUrls)
if len(imgUrls) == 0: # 没有图片则结束
break
for url in imgUrls:
if downImgs(url, dirpath, strtag + ' ' + str(index + 1), imgType):
index += 1
# print("已下载 %s 张" % index)
# 双 break 跳出下载循环
if index == numIMGS:
break
if index == numIMGS:
# print('您一共下载了 %s 张图片' % index)
# print('程序正在终止')
break
关于《如何用python爬虫批量抓取百度图片》的文章文章分享到这里,希望以上内容能对大家有所帮助,让大家学到更多的知识,有感文章 @文章好的,请分享给更多人看。 查看全部
网页爬虫抓取百度图片(Python主要用来做什么应用?爬虫参考)
本文文章将详细讲解python爬虫如何批量抓取百度图片。小编觉得很实用,分享给大家作为参考。希望大家看完这篇文章以后可以有所收获。
Python 主要用于什么
Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开发;6、桌面应用开发。
当我们要获取百度图片的时候,每张图片都要右击下载是很麻烦的。 python爬虫可以实现批量下载,根据我们的下载网站位置、图片位置、图片下载数量、图片下载位置等要求进行批量下载。
1、导入相关库
import requests#爬虫库
import re#正则表达式库
import os#系统库
import time#时间库
2、确定百度图片链接
url='http://image.baidu.com/search/ ... 3B%23百度链接
3、解码
# 解码def decode(url):
for key, value in str_table.items():
url = url.replace(key, value)
return url.translate(char_table)
4、百度图片下拉
def buildUrls(word):
word = urllib.parse.quote(word)
url = r"http://image.baidu.com/search/ ... fp%3D
result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word={word}&face=0&istype=2nc=1&pn={pn}&rn=60"
urls = (url.format(word=word, pn=x) for x in itertools.count(start=0, step=60))
return urls
re_url = re.compile(r'"objURL":"(.*?)"')
5、使用正则表达式获取图片数量
totalnum = re.findall('(.*?)', string)
print("百度图片"+totalnum[0])img_url_regex = '"thumbURL":"(.*?)",'#正则匹配式count=0#总共下载
的图片数index=0#链接后面的序号page=0#当前搜集的页while(1):
strhtml=requests.get(url+str(index),headers=headers)#get方式获取数据
string=str(strhtml.text)
print("已爬取网页")
6、使用正则表达式查找图片url
print("第"+str(page+1)+"页共收集到"+str(len(pic_url))+"张图片")
7、创建文件路径下载
def mkDir(dirName):
dirpath = os.path.join(sys.path[0], dirName)
if not os.path.exists(dirpath):
os.mkdir(dirpath)
return dirpathif __name__ == '__main__':
with open('list.txt', 'r', encoding="utf-8") as f:
result = f.read()
keys = result.split('\n')
key_words = list(enumerate(keys, start=1))
for key in key_words:
word = key[1]
dirpath = mkDir(word)
imgType = 'jpg'
strtag = word
numIMGS = 3
urls = buildUrls(word)
index = 0
#print("= = " * 25)
for url in urls:
print("正在请求:", url)
html = requests.get(url, timeout=10).content.decode('utf-8')
imgUrls = resolveImgUrl(html)
# print(imgUrls)
if len(imgUrls) == 0: # 没有图片则结束
break
for url in imgUrls:
if downImgs(url, dirpath, strtag + ' ' + str(index + 1), imgType):
index += 1
# print("已下载 %s 张" % index)
# 双 break 跳出下载循环
if index == numIMGS:
break
if index == numIMGS:
# print('您一共下载了 %s 张图片' % index)
# print('程序正在终止')
break
关于《如何用python爬虫批量抓取百度图片》的文章文章分享到这里,希望以上内容能对大家有所帮助,让大家学到更多的知识,有感文章 @文章好的,请分享给更多人看。
网页爬虫抓取百度图片(百度爬虫的优化策略及优化方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2021-12-22 14:03
百度爬虫是一个自动程序。内容的爬取路径类似于蜘蛛丝。它通过网页的锚文本链接进行抓取和抓取,所以我们也被称为百度蜘蛛。它抓取网页的内容、图片和文本。等待,爬完后排序再排序,所以网站必须被蜘蛛访问过,被爬过才可以显示在搜索结果页面上。
一、百度爬虫的作用:
搜索引擎通过蜘蛛的自动程序访问各种类型的网站。爬虫首先判断网页是否满足收录的条件。如果满足条件,百度爬虫会下载网页并保存在百度数据中,创建百度快照,当用户搜索某个关键词时,快照通过自己的排序机制进行索引和排序,并然后将排序结果显示给用户。如果网页内容不符合搜索引擎的收录规则,则百度爬虫不会收录,通过链接访问其他页面,重新判断该页面是否为收录。
二、百度爬虫有以下优化策略:
1、 增加链接发现的概率
主动向百度提交新网页无疑是缩短蜘蛛发现机会的一种方式,但蜘蛛的到来并不一定保证它们会收录。取决于页面代码、内容质量、排版、标题等。 另一方面,从逻辑上讲,网站 的外部链接越多,爬虫发现和访问的概率就越大,因此可取在一些高权重的网站上留下外部链接。
2、 增加有效收录的数量和排名页面的百分比
这就需要持续高质量的内容输出,内容必须符合白皮书的要求。一方面可以增加有效收录的数量,另一方面会增加搜索的曝光率,即参与排名的词多。会不断吸引蜘蛛前来拜访。
3、网站使用专用IP地址
爬虫每天对一个IP的爬取频率是有限的。使用共享 IP 很可能会分配给您站点的 IP。此外,也可能受到其他网站的影响,比如违反网站,联合处罚等。之后,就不会再有很多爬虫要访问了。
4、注意内容更新频率
比如你网站先每天发100篇文章,爬虫来的很勤快,然后每天只发几篇文章,有时不更新,这样爬虫的频率就慢了随着时间的推移而减少,所以保持更新频率是蜘蛛稳定访问的关键之一。
5、保证网页打开速度
这一点相信大家都很清楚。所选服务器必须稳定。机房不常被攻击,线路有问题。最好有CDN加速。保证网页的打开速度是百度爬虫顺利访问的前提。如果经常出现无法打开或高延迟,蜘蛛访问的频率肯定会下降。
通过以上几点的分享,我们知道网站需要做哪些优化才能让百度爬虫受益,要注意网站页面的数量多,不代表蜘蛛的频率访问量会高,但有快照,有排名的页面越多,网站的质量越好,索引的页面越多,蜘蛛访问的频率越高。还要注意网站链接层次结构的合理性。关卡过多不利于蜘蛛爬行。 查看全部
网页爬虫抓取百度图片(百度爬虫的优化策略及优化方法)
百度爬虫是一个自动程序。内容的爬取路径类似于蜘蛛丝。它通过网页的锚文本链接进行抓取和抓取,所以我们也被称为百度蜘蛛。它抓取网页的内容、图片和文本。等待,爬完后排序再排序,所以网站必须被蜘蛛访问过,被爬过才可以显示在搜索结果页面上。

一、百度爬虫的作用:
搜索引擎通过蜘蛛的自动程序访问各种类型的网站。爬虫首先判断网页是否满足收录的条件。如果满足条件,百度爬虫会下载网页并保存在百度数据中,创建百度快照,当用户搜索某个关键词时,快照通过自己的排序机制进行索引和排序,并然后将排序结果显示给用户。如果网页内容不符合搜索引擎的收录规则,则百度爬虫不会收录,通过链接访问其他页面,重新判断该页面是否为收录。
二、百度爬虫有以下优化策略:
1、 增加链接发现的概率
主动向百度提交新网页无疑是缩短蜘蛛发现机会的一种方式,但蜘蛛的到来并不一定保证它们会收录。取决于页面代码、内容质量、排版、标题等。 另一方面,从逻辑上讲,网站 的外部链接越多,爬虫发现和访问的概率就越大,因此可取在一些高权重的网站上留下外部链接。
2、 增加有效收录的数量和排名页面的百分比
这就需要持续高质量的内容输出,内容必须符合白皮书的要求。一方面可以增加有效收录的数量,另一方面会增加搜索的曝光率,即参与排名的词多。会不断吸引蜘蛛前来拜访。
3、网站使用专用IP地址
爬虫每天对一个IP的爬取频率是有限的。使用共享 IP 很可能会分配给您站点的 IP。此外,也可能受到其他网站的影响,比如违反网站,联合处罚等。之后,就不会再有很多爬虫要访问了。

4、注意内容更新频率
比如你网站先每天发100篇文章,爬虫来的很勤快,然后每天只发几篇文章,有时不更新,这样爬虫的频率就慢了随着时间的推移而减少,所以保持更新频率是蜘蛛稳定访问的关键之一。
5、保证网页打开速度
这一点相信大家都很清楚。所选服务器必须稳定。机房不常被攻击,线路有问题。最好有CDN加速。保证网页的打开速度是百度爬虫顺利访问的前提。如果经常出现无法打开或高延迟,蜘蛛访问的频率肯定会下降。
通过以上几点的分享,我们知道网站需要做哪些优化才能让百度爬虫受益,要注意网站页面的数量多,不代表蜘蛛的频率访问量会高,但有快照,有排名的页面越多,网站的质量越好,索引的页面越多,蜘蛛访问的频率越高。还要注意网站链接层次结构的合理性。关卡过多不利于蜘蛛爬行。
网页爬虫抓取百度图片(一下如何使用python编写一个简单的网络爬虫?(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2021-12-22 14:02
嗯……今天分享一下如何用python写一个简单的网络爬虫。说起爬虫,这简直就是懒人程序员和宅男的福音。写完就可以爬取你想要的任何资源,大到各种学习资源、论文和资料,小到各种图片和视频(...)等等...嗯...讲解完如何搭建一个简单的爬虫框架,会根据框架写一个栗子。栗子代码会从python百科页面开始爬取各种百科页面信息并记录下来。
请注意,这里的标题是“*Lightweight Crawler*”。之所以说它是轻量级的,是因为它只涉及静态网页的分析。至于AJAX异步加载,不涉及JS脚本。
先来个代码链接~~~
Python爬虫内存版
Python爬虫MySQL版
哦对了,这个爬虫有两个版本,一个是MySQL版本,一个是内存板。有什么不同?前者使用 MySQL 数据库来存储访问过的 URL,而后者使用内存。前者的优点是多次运行相互独立,不会重复爬取同一个URL,而后者则不同。每次运行都会从同一个网址开始,重复抓取同一个网址,因为前者是持久化存储,而后者不是。一旦后一个程序关闭,所有访问过的 URL 记录将被清除。不过前者也有一个缺点,就是运行速度比较慢……具体怎么样,大家可以下载代码运行一下。以下是内存存储版~~~
1. python爬虫框架
在写代码之前,首先要确定一个好的代码框架,这也是一个好程序员的习惯(咳咳……我不是一个好程序员……我以后会……)。在这里,我将描述一个简单的爬虫框架。
一个基本的爬虫应该由以下4部分组成:URL调度器、网页下载器、网页解析器、爬取信息输出器。以下是他们协调工作的流程图。
假设这四个功能块都是按照上图的命名方式命名的,那么根据上面的流程图,我们可以编写主爬虫程序如下(为了测试方便,下面的代码限制了爬取的URL数量为10个) :
# 爬虫主程序class SpiderMain(object):def __init__(self):self.url_manager=UrlManager()self.downloader=HtmlDownloader()self.parser=HtmlParser()self.outputer=HtmlOutputer()def craw(self, url):num=0self.url_manager.add_new_url(url)while self.url_manager.has_new_url() and num < 10:url = self.url_manager.get_new_url() print url# 下载网页内容content=self.downloader.download(url)if content is None:print "Craw failed"continue#解析网页数据data = self.parser.parse(url, content)if data is None:print "Craw failed"continuenew_urls = data[0]new_data = data[1]# 收集解析后爬取的数据self.url_manager.add_new_urls(new_urls)self.outputer.collect(new_data)num+=1self.outputer.output()
1) URL 调度器
URL调度器负责对URL进行处理,主要将未访问过的URL提供给网页下载器进行访问下载,屏蔽已访问过的URL,防止程序爬取同一个页面,提高效率。它不断向网页下载器提供新 URL,然后阻止它们,依此类推,直到没有新 URL 或达到爬网次数限制。假设URL调度器是一个类UrlManager,那么我们可以编写如下代码:
# URL调度器class UrlManager(object):def __init__(self):self.new_url=set()self.old_url=set()def add_new_url(self,url):if url not in self.new_url and url not in self.old_url:self.new_url.add(url)def add_new_urls(self,urls):if urls is None or len(urls) == 0:returnfor url in urls:self.add_new_url(url)def has_new_url(self):return len(self.new_url)!=0def get_new_url(self):url = self.new_url.pop()self.old_url.add(url)return url
简单分析一下,UrlManager提供了两个接口,让主程序可以添加一个或多个新的URL,也可以从中获取需要访问的URL。一旦获取到一个 URL,UrlManager 会在 old_url 集合中添加 URL 以阻止它。2) 网络下载器
这个很简单,我们可以通过urllib2提供的接口获取指定URL的内容。代码显示如下:
# 下载网页内容class HtmlDownloader(object):def download(self,url):if url is None:return Nonetry:response = urllib2.urlopen(url)except urllib2.URLError:return Noneexcept urllib2.HTTPError:return Noneif response.getcode() != 200:return Nonereturn response.read()
这里只需要注意使用try-except处理异常,防止程序崩溃即可。3) 网页解析器
我们使用 BeautifulSoap 来解析网页。BeautifulSoup 是第三方 Python 库,专门用于解析网页和获取 DOM 树。下面简单说一下如何使用BeautifulSoap解析网页。我们用百度百科作为栗子。
首先,我们打开此页面并右键单击以查看元素。我们先来看看标题的html代码。
我们可以看到标题Python的html代码是
...Python...
基于这些标签,我们可以使用 BeautifulSoap 来定位标题。下面具体怎么写。
BeautifulSoap 提供了 find 和 find_all 方法来查找一个或多个指定的节点。以上面的标题为栗子,我们就可以写出python代码如下。
soup = BeautifulSoup(content,'html.parser',from_encoding='utf-8')title = soup.find('dd',class_='lemmaWgt-lemmaTitle-title') if title !=None: title = title.find('h1') if title != None: data['title'] = title.get_text() else: data['title'] = ''
BeautifulSoap通过指定标签名称和标签属性内容,从一个html文档中定位符合要求的标签,并获取其属性和内容。BeautifulSoap的详细使用可以百度~~~这里就不赘述了~~~
这里,我们的任务是从一个html页面中获取一个新的百度百科链接,并获取页面的标题内容和摘要。网页解析器的代码如下:
# 分析网页数据
4) 爬取内容的输出设备
这个也比较简单,主要是存储爬取到的数据,然后写入文件。
# 收集爬取到的数据以及将数据输出到文件中class HtmlOutputer(object):def __init__(self):self.datas = []def collect(self,data):self.datas.append(data)def output(self):with open('output.html','wb') as f:f.write('')f.write('')f.write('')f.write('')try:for data in self.datas:f.write('')f.write('%s' % data['url'].encode('utf-8'))f.write('%s' % data['title'].encode('utf-8'))f.write('%s' % data['summary'].encode('utf-8'))f.write('')except Exception as e:print efinally:f.write('')f.write('')f.write('')f.close()
上面的代码提供了一个collect方法来存储爬虫爬取的数据,然后还提供了一个output方法将保存在内存中的数据输出到一个html文件中,并以表格的形式呈现。2. 爬虫运行效果
嗯... 以上就是一个简单爬虫的简单分析。谢谢~
20 查看全部
网页爬虫抓取百度图片(一下如何使用python编写一个简单的网络爬虫?(组图))
嗯……今天分享一下如何用python写一个简单的网络爬虫。说起爬虫,这简直就是懒人程序员和宅男的福音。写完就可以爬取你想要的任何资源,大到各种学习资源、论文和资料,小到各种图片和视频(...)等等...嗯...讲解完如何搭建一个简单的爬虫框架,会根据框架写一个栗子。栗子代码会从python百科页面开始爬取各种百科页面信息并记录下来。
请注意,这里的标题是“*Lightweight Crawler*”。之所以说它是轻量级的,是因为它只涉及静态网页的分析。至于AJAX异步加载,不涉及JS脚本。
先来个代码链接~~~
Python爬虫内存版
Python爬虫MySQL版
哦对了,这个爬虫有两个版本,一个是MySQL版本,一个是内存板。有什么不同?前者使用 MySQL 数据库来存储访问过的 URL,而后者使用内存。前者的优点是多次运行相互独立,不会重复爬取同一个URL,而后者则不同。每次运行都会从同一个网址开始,重复抓取同一个网址,因为前者是持久化存储,而后者不是。一旦后一个程序关闭,所有访问过的 URL 记录将被清除。不过前者也有一个缺点,就是运行速度比较慢……具体怎么样,大家可以下载代码运行一下。以下是内存存储版~~~
1. python爬虫框架
在写代码之前,首先要确定一个好的代码框架,这也是一个好程序员的习惯(咳咳……我不是一个好程序员……我以后会……)。在这里,我将描述一个简单的爬虫框架。
一个基本的爬虫应该由以下4部分组成:URL调度器、网页下载器、网页解析器、爬取信息输出器。以下是他们协调工作的流程图。
假设这四个功能块都是按照上图的命名方式命名的,那么根据上面的流程图,我们可以编写主爬虫程序如下(为了测试方便,下面的代码限制了爬取的URL数量为10个) :
# 爬虫主程序class SpiderMain(object):def __init__(self):self.url_manager=UrlManager()self.downloader=HtmlDownloader()self.parser=HtmlParser()self.outputer=HtmlOutputer()def craw(self, url):num=0self.url_manager.add_new_url(url)while self.url_manager.has_new_url() and num < 10:url = self.url_manager.get_new_url() print url# 下载网页内容content=self.downloader.download(url)if content is None:print "Craw failed"continue#解析网页数据data = self.parser.parse(url, content)if data is None:print "Craw failed"continuenew_urls = data[0]new_data = data[1]# 收集解析后爬取的数据self.url_manager.add_new_urls(new_urls)self.outputer.collect(new_data)num+=1self.outputer.output()
1) URL 调度器
URL调度器负责对URL进行处理,主要将未访问过的URL提供给网页下载器进行访问下载,屏蔽已访问过的URL,防止程序爬取同一个页面,提高效率。它不断向网页下载器提供新 URL,然后阻止它们,依此类推,直到没有新 URL 或达到爬网次数限制。假设URL调度器是一个类UrlManager,那么我们可以编写如下代码:
# URL调度器class UrlManager(object):def __init__(self):self.new_url=set()self.old_url=set()def add_new_url(self,url):if url not in self.new_url and url not in self.old_url:self.new_url.add(url)def add_new_urls(self,urls):if urls is None or len(urls) == 0:returnfor url in urls:self.add_new_url(url)def has_new_url(self):return len(self.new_url)!=0def get_new_url(self):url = self.new_url.pop()self.old_url.add(url)return url
简单分析一下,UrlManager提供了两个接口,让主程序可以添加一个或多个新的URL,也可以从中获取需要访问的URL。一旦获取到一个 URL,UrlManager 会在 old_url 集合中添加 URL 以阻止它。2) 网络下载器
这个很简单,我们可以通过urllib2提供的接口获取指定URL的内容。代码显示如下:
# 下载网页内容class HtmlDownloader(object):def download(self,url):if url is None:return Nonetry:response = urllib2.urlopen(url)except urllib2.URLError:return Noneexcept urllib2.HTTPError:return Noneif response.getcode() != 200:return Nonereturn response.read()
这里只需要注意使用try-except处理异常,防止程序崩溃即可。3) 网页解析器
我们使用 BeautifulSoap 来解析网页。BeautifulSoup 是第三方 Python 库,专门用于解析网页和获取 DOM 树。下面简单说一下如何使用BeautifulSoap解析网页。我们用百度百科作为栗子。
首先,我们打开此页面并右键单击以查看元素。我们先来看看标题的html代码。
我们可以看到标题Python的html代码是
...Python...
基于这些标签,我们可以使用 BeautifulSoap 来定位标题。下面具体怎么写。
BeautifulSoap 提供了 find 和 find_all 方法来查找一个或多个指定的节点。以上面的标题为栗子,我们就可以写出python代码如下。
soup = BeautifulSoup(content,'html.parser',from_encoding='utf-8')title = soup.find('dd',class_='lemmaWgt-lemmaTitle-title') if title !=None: title = title.find('h1') if title != None: data['title'] = title.get_text() else: data['title'] = ''
BeautifulSoap通过指定标签名称和标签属性内容,从一个html文档中定位符合要求的标签,并获取其属性和内容。BeautifulSoap的详细使用可以百度~~~这里就不赘述了~~~
这里,我们的任务是从一个html页面中获取一个新的百度百科链接,并获取页面的标题内容和摘要。网页解析器的代码如下:
# 分析网页数据
4) 爬取内容的输出设备
这个也比较简单,主要是存储爬取到的数据,然后写入文件。
# 收集爬取到的数据以及将数据输出到文件中class HtmlOutputer(object):def __init__(self):self.datas = []def collect(self,data):self.datas.append(data)def output(self):with open('output.html','wb') as f:f.write('')f.write('')f.write('')f.write('')try:for data in self.datas:f.write('')f.write('%s' % data['url'].encode('utf-8'))f.write('%s' % data['title'].encode('utf-8'))f.write('%s' % data['summary'].encode('utf-8'))f.write('')except Exception as e:print efinally:f.write('')f.write('')f.write('')f.close()
上面的代码提供了一个collect方法来存储爬虫爬取的数据,然后还提供了一个output方法将保存在内存中的数据输出到一个html文件中,并以表格的形式呈现。2. 爬虫运行效果
嗯... 以上就是一个简单爬虫的简单分析。谢谢~
20
网页爬虫抓取百度图片(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 129 次浏览 • 2021-12-19 17:03
运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:名人用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1.@ >txtMegry_Result_Best .py 这个文件用户整理了某一天的用户微博信息,比如爬取2018年4月23日的客户端信息, 查看全部
网页爬虫抓取百度图片(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:名人用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1.@ >txtMegry_Result_Best .py 这个文件用户整理了某一天的用户微博信息,比如爬取2018年4月23日的客户端信息,
网页爬虫抓取百度图片(urllib学习python完基础,迷茫.(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2021-12-18 23:05
网址库
在学习了python的基础知识后,我有点困惑。当我闭上眼睛时,一种空白的窒息感不断袭来。我还缺乏练习,所以我拿着爬行器练手。学习了Spartan python爬虫课程后,我将自己的经验整理如下,供后续的翻阅。整个笔记主要分为以下几个部分:
1.做一个简单的爬虫
第一个环境描述
这个没什么好说的,直接上代码吧!
'''
@ urllib为python自带的一个网络库
@ urlopen为urllib的一个方法,用于打开一个连接并抓取网页,
然后通过read()方法把值赋给read()
'''
import urllib
url = "http://www.lifevc.com"#多嘴两句,为什么要选lifevc呢,主要是最近它很惹我.
html = urllib.urlopen(url)
content = html.read()
html.close()
#可以通过print打印出网页内容
print content
很简单,基本没什么好说的,这就是python的魅力,几行代码就可以完成。
当然,我们只是爬网,并没有真正的价值。然后我们将开始做一些有意义的事情。
2.一个小测试
抢百度贴吧图片
其实很简单,因为要抓取图片,首先要分析网页的源代码。
(这里是了解基本的html知识,浏览器以chrome为例)
如图,这里是对后续步骤的简要说明,请参考。
打开网页,右键单击并选择“检查元素”(底部项目)
点击下方弹出框最左边的问号,问号会变成蓝色
移动鼠标点击我们要捕捉的图片(一个可爱的女孩)
如图,我们可以在源码中获取图片的位置
复制下面的源代码
经过分析对比(这里略略),基本上可以看到要抓拍的图像的特征:
正则表达式稍后更新,请大家注意
根据上面的判断,直接上传代码
'''
@本程序用来下载百度贴吧图片
@re 为正则说明库
'''
import urllib
import re
# 获取网页html信息
url = "http://tieba.baidu.com/p/2336739808"
html = urllib.urlopen(url)
content = html.read()
html.close()
# 通过正则匹配图片特征,并获取图片链接
img_tag = re.compile(r'class="BDE_Image" src="(.+?\.jpg)"')
img_links = re.findall(img_tag, content)
# 下载图片 img_counter为图片计数器(文件名)
img_counter = 0
for img_link in img_links:
img_name = '%s.jpg' % img_counter
urllib.urlretrieve(img_link, "//Users//Sean//Downloads//tieba//%s" %img_name)
img_counter += 1
如图所示,我们将抓取您理解的图片
3.总结
与前两节一样,我们可以轻松访问网页或图片。
补充一点小技巧,如果遇到不是很了解的库或者方法,可以使用下面的方法来初步了解一下。
或输入相关搜索。
当然,百度也可以,只是效率太低。建议使用相关搜索(你懂的,绝对满意)。
这里我们讲解如何抓取网页和下载图片,下面我们将讲解如何在有限抓取的情况下抓取网站。
urllib2
上面我们讲解了如何抓取网页和下载图片,下一节我们将讲解如何抓取受限抓取网站
首先,我们还是用我们上个类的方法来抓取一个大家用的网站作为例子。本文主要分为以下几个部分:
1. 抓取受限网页
首先使用我们在上一节中学到的知识来测试一下:
'''
@本程序用来抓取blog.csdn.net网页
'''
import urllib
url = "http://blog.csdn.net/FansUnion"
html = urllib.urlopen(url)
#getcode()方法为返回Http状态码
print html.getcode()
html.close()
#输出
403
这里我们的输出是 403,这意味着访问被拒绝;同样,200 表示请求成功完成;404 表示未找到该 URL。
可以看到csdn被屏蔽了,无法通过第一节的方法获取到网页。这里我们需要启动一个新的库:urllib2
但我们也看到浏览器可以发布该文本。我们可以模拟浏览器操作来获取网页信息吗?
老办法,我们来看看浏览器是如何向csdn服务器提交请求的。首先简单介绍一下方法:
以下是整理后的头部信息
Request Method:GET
Host:blog.csdn.net
Referer:http://blog.csdn.net/?ref=toolbar_logo
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36
然后根据提取的Header信息,使用urllib2的Request方法模拟浏览器向服务器提交请求。代码如下:
# coding=utf-8
'''
@本程序用来抓取受限网页(blog.csdn.net)
@User-Agent:客户端浏览器版本
@Host:服务器地址
@Referer:跳转地址
@GET:请求方法为GET
'''
import urllib2
url = "http://blog.csdn.net/FansUnion"
#定制自定义Header,模拟浏览器向服务器提交请求
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36')
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
#下载网页html并打印
html = urllib2.urlopen(req)
content = html.read()
print content
html.close()
哈哈,如果你限制我,我就跳过你的限制。据说只要浏览器可以访问,就可以被爬虫抓取。
2. 对代码的一些优化
简化提交头方法
发现每次写这么多req.add_header对自己来说都是一种折磨。有什么办法可以复制并使用它吗?答案是肯定的。
#input:
help(urllib2.Request)
#output(因篇幅关系,只取__init__方法)
__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
通过观察,我们发现headers={},就是说可以以字典的方式提交header信息.那就动手试试咯!!
#只取自定义Header部分代码
csdn_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
"Host": "blog.csdn.net",
'Referer': 'http://blog.csdn.net',
"GET": url
}
req = urllib2.Request(url,headers=csdn_headers)
很容易找到,我要感谢斯巴达的无私教导。
提供动态头信息
如果按照上面的方法进行爬取,很多时候提交的信息会过于单一,会被服务器当作机器爬虫来拒绝。
那么我们是否有一些更聪明的方式来提交一些动态数据,答案肯定是肯定的。而且很简单,直接上代码!
'''
@本程序是用来动态提交Header信息
@random 动态库,详情请参考
'''
# coding=utf-8
import urllib2
import random
url = 'http://www.lifevc.com/'
my_headers = [
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.1',
'Mozilla/4.0 (compatible; GoogleToolbar 5.0.2124.2070; Windows 6.0; MSIE 8.0.6001.18241)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; Sleipnir/2.9.8)',
#因篇幅关系,此处省略N条
]
random_header = random.choice(headers)
# 可以通过print random_header查看提交的header信息
req = urllib2.Request(url)
req.add_header("User-Agent", random_header)
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
content = urllib2.urlopen(req).read()
print content
其实很简单,所以我们就完成了代码的一些优化。 查看全部
网页爬虫抓取百度图片(urllib学习python完基础,迷茫.(组图))
网址库
在学习了python的基础知识后,我有点困惑。当我闭上眼睛时,一种空白的窒息感不断袭来。我还缺乏练习,所以我拿着爬行器练手。学习了Spartan python爬虫课程后,我将自己的经验整理如下,供后续的翻阅。整个笔记主要分为以下几个部分:
1.做一个简单的爬虫
第一个环境描述
这个没什么好说的,直接上代码吧!
'''
@ urllib为python自带的一个网络库
@ urlopen为urllib的一个方法,用于打开一个连接并抓取网页,
然后通过read()方法把值赋给read()
'''
import urllib
url = "http://www.lifevc.com"#多嘴两句,为什么要选lifevc呢,主要是最近它很惹我.
html = urllib.urlopen(url)
content = html.read()
html.close()
#可以通过print打印出网页内容
print content
很简单,基本没什么好说的,这就是python的魅力,几行代码就可以完成。
当然,我们只是爬网,并没有真正的价值。然后我们将开始做一些有意义的事情。
2.一个小测试
抢百度贴吧图片
其实很简单,因为要抓取图片,首先要分析网页的源代码。
(这里是了解基本的html知识,浏览器以chrome为例)
如图,这里是对后续步骤的简要说明,请参考。
打开网页,右键单击并选择“检查元素”(底部项目)
点击下方弹出框最左边的问号,问号会变成蓝色
移动鼠标点击我们要捕捉的图片(一个可爱的女孩)
如图,我们可以在源码中获取图片的位置

复制下面的源代码
经过分析对比(这里略略),基本上可以看到要抓拍的图像的特征:
正则表达式稍后更新,请大家注意
根据上面的判断,直接上传代码
'''
@本程序用来下载百度贴吧图片
@re 为正则说明库
'''
import urllib
import re
# 获取网页html信息
url = "http://tieba.baidu.com/p/2336739808"
html = urllib.urlopen(url)
content = html.read()
html.close()
# 通过正则匹配图片特征,并获取图片链接
img_tag = re.compile(r'class="BDE_Image" src="(.+?\.jpg)"')
img_links = re.findall(img_tag, content)
# 下载图片 img_counter为图片计数器(文件名)
img_counter = 0
for img_link in img_links:
img_name = '%s.jpg' % img_counter
urllib.urlretrieve(img_link, "//Users//Sean//Downloads//tieba//%s" %img_name)
img_counter += 1
如图所示,我们将抓取您理解的图片

3.总结
与前两节一样,我们可以轻松访问网页或图片。
补充一点小技巧,如果遇到不是很了解的库或者方法,可以使用下面的方法来初步了解一下。
或输入相关搜索。
当然,百度也可以,只是效率太低。建议使用相关搜索(你懂的,绝对满意)。
这里我们讲解如何抓取网页和下载图片,下面我们将讲解如何在有限抓取的情况下抓取网站。
urllib2
上面我们讲解了如何抓取网页和下载图片,下一节我们将讲解如何抓取受限抓取网站
首先,我们还是用我们上个类的方法来抓取一个大家用的网站作为例子。本文主要分为以下几个部分:
1. 抓取受限网页
首先使用我们在上一节中学到的知识来测试一下:
'''
@本程序用来抓取blog.csdn.net网页
'''
import urllib
url = "http://blog.csdn.net/FansUnion"
html = urllib.urlopen(url)
#getcode()方法为返回Http状态码
print html.getcode()
html.close()
#输出
403
这里我们的输出是 403,这意味着访问被拒绝;同样,200 表示请求成功完成;404 表示未找到该 URL。
可以看到csdn被屏蔽了,无法通过第一节的方法获取到网页。这里我们需要启动一个新的库:urllib2
但我们也看到浏览器可以发布该文本。我们可以模拟浏览器操作来获取网页信息吗?
老办法,我们来看看浏览器是如何向csdn服务器提交请求的。首先简单介绍一下方法:

以下是整理后的头部信息
Request Method:GET
Host:blog.csdn.net
Referer:http://blog.csdn.net/?ref=toolbar_logo
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36
然后根据提取的Header信息,使用urllib2的Request方法模拟浏览器向服务器提交请求。代码如下:
# coding=utf-8
'''
@本程序用来抓取受限网页(blog.csdn.net)
@User-Agent:客户端浏览器版本
@Host:服务器地址
@Referer:跳转地址
@GET:请求方法为GET
'''
import urllib2
url = "http://blog.csdn.net/FansUnion"
#定制自定义Header,模拟浏览器向服务器提交请求
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36')
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
#下载网页html并打印
html = urllib2.urlopen(req)
content = html.read()
print content
html.close()
哈哈,如果你限制我,我就跳过你的限制。据说只要浏览器可以访问,就可以被爬虫抓取。
2. 对代码的一些优化
简化提交头方法
发现每次写这么多req.add_header对自己来说都是一种折磨。有什么办法可以复制并使用它吗?答案是肯定的。
#input:
help(urllib2.Request)
#output(因篇幅关系,只取__init__方法)
__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
通过观察,我们发现headers={},就是说可以以字典的方式提交header信息.那就动手试试咯!!
#只取自定义Header部分代码
csdn_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
"Host": "blog.csdn.net",
'Referer': 'http://blog.csdn.net',
"GET": url
}
req = urllib2.Request(url,headers=csdn_headers)
很容易找到,我要感谢斯巴达的无私教导。
提供动态头信息
如果按照上面的方法进行爬取,很多时候提交的信息会过于单一,会被服务器当作机器爬虫来拒绝。
那么我们是否有一些更聪明的方式来提交一些动态数据,答案肯定是肯定的。而且很简单,直接上代码!
'''
@本程序是用来动态提交Header信息
@random 动态库,详情请参考
'''
# coding=utf-8
import urllib2
import random
url = 'http://www.lifevc.com/'
my_headers = [
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.1',
'Mozilla/4.0 (compatible; GoogleToolbar 5.0.2124.2070; Windows 6.0; MSIE 8.0.6001.18241)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; Sleipnir/2.9.8)',
#因篇幅关系,此处省略N条
]
random_header = random.choice(headers)
# 可以通过print random_header查看提交的header信息
req = urllib2.Request(url)
req.add_header("User-Agent", random_header)
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
content = urllib2.urlopen(req).read()
print content
其实很简单,所以我们就完成了代码的一些优化。
网页爬虫抓取百度图片(请求抓取的url页面要抓取,read() )
网站优化 • 优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2021-12-16 12:56
)
一、Python请求抓取URL页面
要获取URL,首先在Python中模拟对URL的请求
#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
def request(self):
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
if __name__ == '__main__':
nb = NewsBaidu()
nb.request()
运行效果
状态=200,表示请求成功,结果读取()
二、分析页面HTML
1、我们想要捕获的内容是百度新闻左侧列表的标题和href
2、加载re模块并定期匹配我们想要的内容。让我们来看看HTML样式的第一个
这是我们要捕获的页面上部的HTML。可以看到,总理讲话的科技成果将走出"闺房",收录我们想要的内容。[总理讲话的科技成果将走出“闺房”,href[]的内容以常规形式摘录
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
在下面的部分中,我将不分析要捕获的HTML内容。原理是一样的
三、源代码
<p>#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
import urllib
import re
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
self.f = open(u'百度新闻.txt','a')
def request(self):
try:
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
#print result.read()
if result.status == 200:
data = result.read()
self.main(data)
except Exception,e:
print e
finally:
conn.close()
self.f.close()
def main(self,data):
print u'获取中...'
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
items = re.findall(pattern,data)
content = ''
for item in items:
content +=item[1].strip()+'\t'+item[0].strip()+'\t\n'
pattern = re.compile(r'(.*?)',re.S)
items = re.findall(pattern,data)
for item in items:
pattern = re.compile(r'^http://.* 查看全部
网页爬虫抓取百度图片(请求抓取的url页面要抓取,read()
)
一、Python请求抓取URL页面
要获取URL,首先在Python中模拟对URL的请求
#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
def request(self):
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
if __name__ == '__main__':
nb = NewsBaidu()
nb.request()
运行效果
状态=200,表示请求成功,结果读取()
二、分析页面HTML
1、我们想要捕获的内容是百度新闻左侧列表的标题和href
2、加载re模块并定期匹配我们想要的内容。让我们来看看HTML样式的第一个
这是我们要捕获的页面上部的HTML。可以看到,总理讲话的科技成果将走出"闺房",收录我们想要的内容。[总理讲话的科技成果将走出“闺房”,href[]的内容以常规形式摘录
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
在下面的部分中,我将不分析要捕获的HTML内容。原理是一样的
三、源代码
<p>#!/usr/bin/python
# -*- coding:utf-8 -*-
import httplib
import urllib
import re
class NewsBaidu(object):
def __init__(self):
super(NewsBaidu,self).__init__()
self.f = open(u'百度新闻.txt','a')
def request(self):
try:
conn = httplib.HTTPConnection('news.baidu.com') #请求的host
request_url = '/' #请求的网页路径
body = '' #请求的参数
headers = {} #请求所带的头信息,该参数是一个字典
conn.request('GET',request_url,body,headers)
result = conn.getresponse()
print u'获取百度新闻'
print result.status
print result.reason
#print result.read()
if result.status == 200:
data = result.read()
self.main(data)
except Exception,e:
print e
finally:
conn.close()
self.f.close()
def main(self,data):
print u'获取中...'
pattern = re.compile(r'<strong>.*?href="(.*?)" target="_blank" class="a3" mon="ct=1&a=1&c=top&pn=[0-9]+">(.*?)</a>.*?strong>',re.S)
items = re.findall(pattern,data)
content = ''
for item in items:
content +=item[1].strip()+'\t'+item[0].strip()+'\t\n'
pattern = re.compile(r'(.*?)',re.S)
items = re.findall(pattern,data)
for item in items:
pattern = re.compile(r'^http://.*
网页爬虫抓取百度图片(什么是爬虫爬虫,即网络上爬行的一直蜘蛛?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2021-12-16 04:35
1、什么是爬虫
爬虫是一种网络爬虫。大家可以把它理解为在互联网上爬行的蜘蛛。互联网就像一个大网,爬虫就是在这个网上爬来爬去的蜘蛛。如果它遇到资源,那么它会被爬下来。你想爬什么?由您来控制它。
比如它在爬一个网页,他在这个网上找到了一条路,其实就是一个网页的超链接,然后就可以爬到另一个网页上获取数据了。这样一来,整个相连的网都在这蜘蛛触手可及的范围内,分分钟爬下来也不成问题。
2、浏览网页的过程
当用户浏览网页时,我们可能会看到很多漂亮的图片,比如我们会看到几张图片和百度搜索框。这个过程实际上是在用户输入URL,通过DNS服务器寻找服务器主机之后。向服务器发送请求。服务器解析后,将浏览器的HTML、JS、CSS等文件发送给用户。浏览器解析出来,用户可以看到各种图片。
因此,用户看到的网页本质上都是由HTML代码组成的,爬虫爬取了这些内容。通过对这些HTML代码进行分析和过滤,可以获得图片、文字等资源。
3、URL的含义
URL,即统一资源定位符,也就是我们所说的网址。统一资源定位符是互联网上可用资源的位置和访问方式的简明表示,是互联网上标准资源的地址。Internet 上的每个文件都有一个唯一的 URL,其中收录指示文件位置以及浏览器应如何处理它的信息。
URL格式由三部分组成:
① 第一部分是协议(或称服务方式)。
②第二部分是收录资源的主机的IP地址(有时也包括端口号)。
③第三部分是宿主机资源的具体地址,如目录、文件名等。
爬虫在爬取数据时,必须要有目标网址才能获取数据。因此,它是爬虫获取数据的基本依据。准确理解其含义对爬虫学习有很大帮助。
4、环境配置
学习Python,当然少不了环境的配置。一开始用的是Notepad++,但是发现它的提示功能太弱了。所以,我在 Windows 下使用 PyCharm,在 Linux 下使用 Eclipse for Python。有几个优秀的IDE,可以参考这个文章学习Python推荐的IDE。好的开发工具是前进的动力。我希望你能找到适合你的 IDE。
知识点补充:
爬虫和爬虫的基本逻辑是什么
“爬行动物”是一个形象术语。互联网就像一个大网,爬虫就是在这个大网上爬行的程序或脚本。如果您遇到错误(资源),请获取或下载所需的资源。这个资源通常是网页、文件等,你可以通过资源中的url链接继续抓取这些链接的资源。
您也可以使用爬虫来模拟我们正常的上网行为。打开网页,分析网页内容,得到我们想要的。 查看全部
网页爬虫抓取百度图片(什么是爬虫爬虫,即网络上爬行的一直蜘蛛?)
1、什么是爬虫
爬虫是一种网络爬虫。大家可以把它理解为在互联网上爬行的蜘蛛。互联网就像一个大网,爬虫就是在这个网上爬来爬去的蜘蛛。如果它遇到资源,那么它会被爬下来。你想爬什么?由您来控制它。
比如它在爬一个网页,他在这个网上找到了一条路,其实就是一个网页的超链接,然后就可以爬到另一个网页上获取数据了。这样一来,整个相连的网都在这蜘蛛触手可及的范围内,分分钟爬下来也不成问题。
2、浏览网页的过程
当用户浏览网页时,我们可能会看到很多漂亮的图片,比如我们会看到几张图片和百度搜索框。这个过程实际上是在用户输入URL,通过DNS服务器寻找服务器主机之后。向服务器发送请求。服务器解析后,将浏览器的HTML、JS、CSS等文件发送给用户。浏览器解析出来,用户可以看到各种图片。
因此,用户看到的网页本质上都是由HTML代码组成的,爬虫爬取了这些内容。通过对这些HTML代码进行分析和过滤,可以获得图片、文字等资源。
3、URL的含义
URL,即统一资源定位符,也就是我们所说的网址。统一资源定位符是互联网上可用资源的位置和访问方式的简明表示,是互联网上标准资源的地址。Internet 上的每个文件都有一个唯一的 URL,其中收录指示文件位置以及浏览器应如何处理它的信息。
URL格式由三部分组成:
① 第一部分是协议(或称服务方式)。
②第二部分是收录资源的主机的IP地址(有时也包括端口号)。
③第三部分是宿主机资源的具体地址,如目录、文件名等。
爬虫在爬取数据时,必须要有目标网址才能获取数据。因此,它是爬虫获取数据的基本依据。准确理解其含义对爬虫学习有很大帮助。
4、环境配置
学习Python,当然少不了环境的配置。一开始用的是Notepad++,但是发现它的提示功能太弱了。所以,我在 Windows 下使用 PyCharm,在 Linux 下使用 Eclipse for Python。有几个优秀的IDE,可以参考这个文章学习Python推荐的IDE。好的开发工具是前进的动力。我希望你能找到适合你的 IDE。
知识点补充:
爬虫和爬虫的基本逻辑是什么
“爬行动物”是一个形象术语。互联网就像一个大网,爬虫就是在这个大网上爬行的程序或脚本。如果您遇到错误(资源),请获取或下载所需的资源。这个资源通常是网页、文件等,你可以通过资源中的url链接继续抓取这些链接的资源。
您也可以使用爬虫来模拟我们正常的上网行为。打开网页,分析网页内容,得到我们想要的。
网页爬虫抓取百度图片(你检查下这个网页中的内容是不是通过js代码读取外部json数据来动态更新的)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-12-13 16:20
你通过js代码读取外部json数据来检查这个网页的内容是否动态更新。
请求只能获取网页的静态源代码,不能获取动态更新的内容。
对于动态更新的内容,使用 selenium 进行爬取。
或者通过F12控制台分析加载页面数据的链接,找到真正的json数据的地址进行爬取。
右键单击页面,在右键菜单中选择“查看网页源代码”。
这是网页的静态源代码。
如果本网页的静态源代码中有需要爬取的内容,则说明该页面没有动态内容,可以通过请求进行爬取。
否则就意味着页面内容是动态更新的,需要用selenium来爬取。
您的问题的答案代码如下:
import requests
import urllib.request
from bs4 import BeautifulSoup
import os
import time
url = 'https://image.baidu.com/search ... 39%3B
headers = {
'Host': 'image.baidu.com',
'Pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
response = requests.get(url, headers=headers) # 使用headers避免访问受限
print(response.json())
items = response.json()['data']
folder_path = './photo/'
if not os.path.exists(folder_path): # 判断文件夹是否已经存在
os.makedirs(folder_path) # 创建文件夹
for index, item in enumerate(items):
if item:
print(item['middleURL'])
html = requests.get(item['middleURL']) # get函数获取图片链接地址,requests发送访问请求
img_name = folder_path + str(index + 1) + '.png'
with open(img_name, 'wb') as file: # 以byte形式将图片数据写入
file.write(html.content)
file.flush()
file.close() # 关闭文件
print('第%d张图片下载完成' % (index + 1))
time.sleep(1) # 自定义延时
print('抓取完成')
如果有帮助,希望采纳!谢谢! 查看全部
网页爬虫抓取百度图片(你检查下这个网页中的内容是不是通过js代码读取外部json数据来动态更新的)
你通过js代码读取外部json数据来检查这个网页的内容是否动态更新。
请求只能获取网页的静态源代码,不能获取动态更新的内容。
对于动态更新的内容,使用 selenium 进行爬取。
或者通过F12控制台分析加载页面数据的链接,找到真正的json数据的地址进行爬取。
右键单击页面,在右键菜单中选择“查看网页源代码”。

这是网页的静态源代码。
如果本网页的静态源代码中有需要爬取的内容,则说明该页面没有动态内容,可以通过请求进行爬取。
否则就意味着页面内容是动态更新的,需要用selenium来爬取。
您的问题的答案代码如下:
import requests
import urllib.request
from bs4 import BeautifulSoup
import os
import time
url = 'https://image.baidu.com/search ... 39%3B
headers = {
'Host': 'image.baidu.com',
'Pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
response = requests.get(url, headers=headers) # 使用headers避免访问受限
print(response.json())
items = response.json()['data']
folder_path = './photo/'
if not os.path.exists(folder_path): # 判断文件夹是否已经存在
os.makedirs(folder_path) # 创建文件夹
for index, item in enumerate(items):
if item:
print(item['middleURL'])
html = requests.get(item['middleURL']) # get函数获取图片链接地址,requests发送访问请求
img_name = folder_path + str(index + 1) + '.png'
with open(img_name, 'wb') as file: # 以byte形式将图片数据写入
file.write(html.content)
file.flush()
file.close() # 关闭文件
print('第%d张图片下载完成' % (index + 1))
time.sleep(1) # 自定义延时
print('抓取完成')

如果有帮助,希望采纳!谢谢!