关键词文章采集源码(对于爬取翻页的流程基本如下(有些)翻页流程)
优采云 发布时间: 2021-08-28 20:03关键词文章采集源码(对于爬取翻页的流程基本如下(有些)翻页流程)
给出完整代码:(需要的请自行下载,有问题请留言)
pudn下载连接:
有时间我会写一篇百度图片和谷歌图片的python爬虫博客,我会带头。
Google 图片抓取工具连接:
百度图片爬虫连接:
在此期间我正在实习。我正在做一些主要的网站 图片抓取工作。基本就告一段落了。现在搜索百度图片、谷歌图片、必应图片三张网站。抓取并下载结果。
首先通过爬取过程中遇到的问题,总结如下:
1、每次加载的图片数量每个网站都是可变的,每翻一页都会刷新。对于数据量大的爬虫,几乎都需要用到翻页功能。有以下两种方式:
1)通过网站上的网址刷新,如必应图片:
url = 'http://cn.bing.com/images/async?q={0}&first={1}&count=35&relp=35&lostate=r
&mmasync=1&dgState=x*175_y*848_h*199_c*1_i*106_r*0'
2) 使用 selenium 模拟鼠标操作来翻页,在谷歌图片抓取时会解释。
2、 每个网站 应用的图片加载技术都不同。 网站抓取静态加载的图片非常容易,因为每张图片的URL都直接显示在网页的源代码中。找到每个图片对应的url,可以使用urlretrieve()下载。但是动态加载的网站比较复杂,需要具体问题具体分析。例如,Google Pictures 每次加载 35 张图片(只能获取 35 张图片的 URL)。当滚动一次时,网页不会刷新,而是再次加载一批图片,并与之前加载的图片一起显示在网页的源代码中。对于动态加载的网站,我推荐使用selenium库来爬取。
抓取图片的过程基本如下(对于网站可以通过URL翻页或者不需要翻页):
1. 找到你需要爬取图片的网站。 (以必应为例)
2. 使用google element check(其他没用过,不再介绍)查看网页源码。
3. 使用左上角的元素检查找到图片对应的代码。
4.通过观察找到翻页的规律(有的网站动态加载是完全不可见的,不推荐这种方法)
从图中可以看到标签div,class='dgControl hover'中data-nexturl的内容会随着我们滚动页面和先翻页而不断变化,q=binary code是我们的关键词。添加前缀后,我们就得到了我们要使用的url。
5.我们把网页的源码放到BeautifulSoup中,代码如下:
url = 'http://cn.bing.com/images/async?q={0}&first={1}&count=35&relp=35&lostate=r&mmasync=1&dgState=x*175_y*848_h*199_c*1_i*106_r*0'
agent = {'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.165063 Safari/537.36 AppEngine-Google."}
page1 = urllib.request.Request(url.format(InputData, i*35+1), headers=agent)
page = urllib.request.urlopen(page1)
soup = BeautifulSoup(page.read(), 'html.parser')
我们得到的汤是一个类‘bs4.BeautifulSoup’对象,可以直接操作,具体内容可以自行搜索。
首先选择我们需要的url所在的类,如下图:
波浪线是我们需要的网址。
我们从下面的代码中得到我们需要的url:
if not os.path.exists("./" + word):#创建文件夹
os.mkdir('./' + word)
for StepOne in soup.select('.mimg'):
link=StepOne.attrs['src']#将得到的转化为字典形式并取src对应的value。
count = len(os.listdir('./' + word)) + 1
SaveImage(link,word,count)#调用函数保存得到的图片。
最后调用urlretrieve()函数下载我们得到的图片url,代码如下:
try:
time.sleep(0.2)
urllib.request.urlretrieve(link,'./'+InputData+'/'+str(count)+'.jpg')
except urllib.error.HTTPError as urllib_err:
print(urllib_err)
except Exception as err:
time.sleep(1)
print(err)
print("产生未知错误,放弃保存")
else:
print("图+1,已有" + str(count) + "张图")
这里需要强调的是,除了像之前打开的URL和当前下载的图片这样的错误检测之外,需要使用try,否则程序出现错误时很容易崩溃,极大地浪费了数据时间采集.