本博客主要记录跟随崔庆才老师的分析Ajax抓取今日头条街拍美图学习的整个过程,更多精品文章,请参阅崔老师的博客,再次感谢崔老师教导。
3月15日更新,14日代码敲完了,今天主要总结整个过程
-
个人觉得在掌握了Python的基础的前提下,爬虫的难点在于两点:
- 分析网页结构,看要获取的数据获取的方式
- 利用语言知识去匹配或者利用其它的方法,比如ajax等发起请求获取数据等等
-
这两点前者更为复杂,因为有的网页比如本例中,街拍的索引页面的详情页面中,详情的数据是在页面的一个js的变量中,但是在我跟随视频学习的过程中发现,此时的页面很多已经不是存在一个变量中,而是存在于标签中,说明页面是有过改版,此时同一个详情页面就不能一概而论,要写不同的方法处理,不过由于爬虫功底还很薄弱,所以对于存在于标签中的链接,我并没有处理,而是进行了过滤,待到基础比较扎实以后,会对代码进行更新(
March 15
)
- 前期要求
简单来说此次抓取氛围两部分,一部分是图片的索引页面,另外一部分是通过点击索引进入详情页面,抓取具体的图片的地址,并将其存储,最后下载图片资源
- 索引页面分析
跟随视频学习,打开谷歌的工具查看索引页面的源代码,没有看到和素材相关的资源,这里略总结一下,以目前自己所学的这点知识,想要的链接信息主要存在于一下三方面的元素中
-
存在于HTML的标签的链接中
-
存在于CSS样式中
-
存在于 页面的js代码中
-
存在于ajax的请求中(索引页面就是这种)
-
索引页数据分析
-
索引页抓取
-
构建ajax请求获取数据
-
代码分析
-
解析索引页面返回的json数据
-
- 详情页面分析
经过分析,在图片的详情页面图片数据是存储在页面的
var gallery
变量中,这变量后面也是一个json数据,所以我们经过正则匹配来或者这个变量后边的json数据
- 详情页面抓取
这个比较简单,根据索引页的url,进行页面获取,与索引页的获取基本相同
- 详情页面解析
这里要做的工作就是在页面中通过正则匹配找到
var gallery
,然后获取后面的json数据- 由于详情页面就是普通的HTML页面,可以通过BeautifulSoup框架解析, BeautifulSoup框架需要通过pip安装,然后导入
from bs4 import BeautifulSoup
- 由于详情页面就是普通的HTML页面,可以通过BeautifulSoup框架解析, BeautifulSoup框架需要通过pip安装,然后导入
- 将匹配完获取的数据用json框架进行解析,由于图片数据是一个数组,故需要遍历取值 * 返回一个数组,包括详情页面的标题,详情页面的url,图片的url数组
- 下载安装mongoDB,这里不赘述
- 配置mongoDB,可以参见我的博客
- pycharm配置mongoDB
def main(offset):
html = get_page_index(offset, KEYWORD)
for url in parse_page_index(html):
detail = get_page_detail(url)
# 这里进行一下判断,如果能正常返回在进行解析
if detail and parse_page_detail(detail, url):
result = parse_page_detail(detail, url)
if result:
save_to_db(result)
if __name__ == "__main__":
main()
无论从接触爬虫还是博客的编写都显得匆忙和粗糙,以后随着知识的完善,博客也会进行相应的更新,希望大家不吝赐教,提出问题指正,谢谢