博客第三天
测试页面:weheartit:https://weheartit.com/inspirations/taylorswift?page=1&scrolling=true&before=308888434,
目的:爬取并存储页面上的图片,
工程内容:Python3.5,jupyter notebook
工具包:requests, BeautifulSoup,urllib.request
代码(可翻页):
import requestsfrom bs4 import BeautifulSoup as bs
import urllib.request as urlrequest #用于存储图片
import time #设定暂定
import random #随机函数
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36',
} #自写headers
# proxies = {'https':'62.133.191.116:8080'}
path = 'D:Python_projects/taylorswift_imgs/10pages1/' #定义存储路径
#urls = ['https://weheartit.com/inspirations/taylorswift?page={}&scrolling=true&before=308888434'.format(str(i)) for i in range(20)] #此次未使用
base_url = 'https://weheartit.com/inspirations/taylorswift?page=' #用于爬虫
def get_url(num): #定义函数,获取图片链接
imgs_url = [] #用于存储图片链接
for page_num in range(6,num + 1): #开始获取链接
time.sleep(random.uniform(1,5)) #随机暂停1~5s
full_url = base_url + str(page_num) #补充链接
web = requests.get(full_url,headers = headers) #获取页面
soup = bs(web.text,'lxml') #解析页面
imgs = soup.select('img.entry-thumbnail') #抽取图片
for img in imgs:
time.sleep(random.uniform(1,5))
img_url = img.get('src') #抽取图片链接
imgs_url.append(img_url)
return imgs_url
#print(imgs_url) #用于测试
def dl_imgs(img_url): #定义函数,下载图片
urlrequest.urlretrieve(img_url,path+img_url.split('/')[-2]+img_url.split('/')[-1]) #下载并命名
for img_url in get_url(10): #调用函数,获取图片链接
time.sleep(random.uniform(1,5))
dl_imgs(img_url) #调用函数,存储图片
print结果(部分):
此处print imgs_url 里面的链接,共1080条,此处保存为csv以供分析
存储截图(部分):
内容:成功存储前十页240张图片,两个子文件夹分别为前5页和后5页内容(因为被封锁多次,所以测试了很久由于时间问题,没有一次性爬取10页,另外的24张图片为第一页爬取测试时存储的)
error:1 . 设置代理进行翻页爬取时,总是被封锁(和之前的另一个工程很像,应该是代理之类的问题)
2 . 不设置proxies,只用headers,在使用浏览器插件的情况下可以比较好地完成任务
3 . 比较耗费时间,因为随机时间设置太短或者太规律容易被封锁
4 . 此次同时联系函数的定义和使用,如果只用for循环的话应该更容易完成爬取10页的任务
总结:
1. 注意存储路径的设置
2. 存储文件的命名匹配规则,注意.strip( ) [ -n ]方法的应用
3. (翻页时)注意函数的逻辑性
4. 由于使用了浏览器插件,如果再设置代理反而会影响爬取(以前也有设置代理反而被封锁的情况)
5. 对于函数中涉及增加以及返回值的部分需要认真分析
6. 此次下载的图片似乎跟分析的页面有些出入,这点需要再花时间弄清楚