20200423,参加百度飞桨深度学习7日打卡营第六期,Day2-深度学习实践平台与Python进阶。
今天课程比第一天的难度略高,主要讲的是网页数据爬取(百度百科中《青春有你2》选手的图片及其url),并结合昨天所学把爬取的文件名列出。
网页数据爬取主要用到了requests和BeautifulSoup两个库,前者用于发送http请求获取网页内容,后者可将获取的html内容解析后保存目标数据,代码如下:
resp = requests.get(link, headers = headers)
bs = BeautifulSoup(resp.text, 'lxml')
pic_list_url = bs.select('.summary-pic a')[0].get('href')
pic_list_url = 'https://baike.baidu.com' + pic_list_url
pic_list_resp = requests.get(pic_list_url, headers = headers)
bs = BeautifulSoup(pic_list_resp.text, 'lxml')
pic_list_html = bs.select('.pic-list img')
pic_urls = []
for pic_html in pic_list_html:
pic_url = pic_html.get('src')
pic_urls.append(pic_url)
pic_urls是所有选手的图片,之后用以下代码将图片保存在本地:
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = str(i + 1) + '.jpg'
with open(path+string, 'wb') as f:
f.write(pic.content)
print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
做完作业检查结果的时候,发现爬取的图片有很多是缩略图,再查源网页可见大图是通过Javascript动态加载的,requests不支持,要用requests_html,以后有时间了用新包优化一下。
来来来,互粉互粉 ^o^
动态加载的是不好爬
不错不错,学习一下