继续修改,爬虫贴吧,上次的每次只取一个图片.

from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import random
import os
import urllib.request
#把base_url随便改成别的贴吧的吧的首页都行
base_url = "https://tieba.baidu.com/f?"
num=5000
for i in range(50):#爬取50页
       #这地方写的不对,因该用正则提取后面的pn
       #下面在加一个判断,是否你贴入的base_url是首页.因为首页后面没有&pn处理不同:
       a=re.findall(".*&pn",base_url)
       shumu=50*i
       if a==[]:
              #那么我们就加入&pn=...
              url=base_url+'&pn='+str(shumu)
       else:
              url=base_url+str(shumu)
       
       
       #把url地址里面的东西读出来给soup
       try:#用try来解决有时候编码utf-8不好使的问题
        html = urlopen(url).read().decode('utf-8')
       except Exception:
              continue
       soup = BeautifulSoup(html, features='lxml')
       #把地址里面的每一个页码地址都取出来
       #这个正则表达式表示开头必须是/p的,里面有/p后很多数字的,(?=)这个叫断言,利用这个来加限制条件
       #继续搞一个贪婪匹配和非贪婪匹配的区别 .*?5表示非贪婪匹配   235235会出来2个235    .*5是贪婪匹配235235会出来235235
       sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("(?=^/p)/p/\d*")})
       
       
       for i in range(len(sub_urls)):
        a=sub_urls[i]['href']#利用这个方式提取一个网址里面的href
        
        
        #这里面每一个a就是要爬取的网页
        #下面开始爬取他的图片
        baseurl='https://tieba.baidu.com'
        url=baseurl+str(a)
        try:
         html = urlopen(url).read().decode('utf-8')
        except Exception:
              continue
        soup = BeautifulSoup(html, features='lxml')
        
        #soup里面进入标签的方法是.标签就行了所谓标签就是<a>...<\a>这里面东西就是a标签里面的内容
        
        tupian=soup.cc

        #继续加一个功能如果需要保存到的dir不存在就生成,存在就pass
        aaa=os.path.exists('d:/tupian')
        if aaa!=True:
               os.makedirs('d:/tupian')
        #先设置一下保存的位置:
        dir=r'D:\tupian'
        
#这个目录先自己手动创立一下
        #然后直接find img get src但是有的cc里面没有图片
        print (11111111)
        
        try:
          if tupian!=None and tupian.find_all('img')!=None:
                 img_srcall = tupian.find_all('img')
                 #注意find的话后面可以直接.get  find_all后面不能直接.get

                 
                 print (img_srcall)
                 print ('**********')
                 print (333999)
                 pic_name=str(num)
                 print (img_srcall)
                 for _ in img_srcall:
                 #这个pic_name还必须要写一个拓展名
                        img_src=_.get('src')
                        pic_name=pic_name+img_src[-4:]
                        pic_name=os.path.join(dir,pic_name)
                        urllib.request.urlretrieve(img_src, pic_name)
                        
                        num+=1
        except Exception:
              continue
        
        
          

       
##
##
##      
##his = ["/item/%E9%B8%A1%E7%9F%A2%E8%97%A4/931175?fromtitle=%E9%B8%A1%E5%B1%8E%E8%97%A4&fromid=374872"]
##
##for i in range(200):
## url = base_url + his[-1]
##
##print (77777777)
##
##html = urlopen(url).read().decode('utf-8')
##print (8888888888)
##soup = BeautifulSoup(html, features='lxml')
##print (9999999)
##
##print(i, soup.find('h1').get_text(), ' url: ',base_url+ his[-1])
##
### find valid urls
##sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("(?=^/item)/item/(%.{2})+$")})
##
##
##print ('爬到了'+str(i+1))
##if len(sub_urls) != 0 :
##
## his.append(random.sample(sub_urls, 1)[0]['href'])
##else:
## if len(his)==1:
##  pass
## else:
### no valid sub link found
##  his.pop()

 

posted on 2018-02-14 10:52  张博的博客  阅读(331)  评论(0编辑  收藏  举报

导航