关键词文章采集源码(对于爬取翻页的流程基本如下(有些)翻页流程)

优采云 发布时间: 2021-09-02 17:24

  关键词文章采集源码(对于爬取翻页的流程基本如下(有些)翻页流程)

  给出完整代码:(需要的请自行下载,有问题请留言)

  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,否则程序出现错误时很容易崩溃,极大地浪费了数据时间采集.

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线