此学习笔记整理于 Ryan Mitchell Web Scraping with Python- Collecting Data from the Modern Web (2015) Chapter 3 Starting to crawl
一,随机跳转
首先,说下函数定义的过程。
def 函数名(参数)
函数内容代码
return XX #函数返回什么
我们来看这个函数,名称getLinks,参数是articleUrl。
函数内容代码:首先打开这个网址(两个文本合起来的)
bs美化下,找到div tag,然后id属性是bodyContent。在此基础上,再找到所有的,a tag(有链接的tag),然后是关键词href应该等于什么?re.compile是正则表达式,后面看:(/wiki/)这样的形式,(我也不知道为啥/没有用\来表示其本义,可能是加了括号吧,理解就好,(\/wiki\/)也可以的),括号前加了^,表示以括号内的内容开头,然后是(?!:)表示不包括:,((?!:).) 至少有一个字符,然后是*,表示重复若干次,$表示结尾(从头到尾不包括:)。
这里的筛选是作者发现的一些rules需要遵守,爬虫来筛选我们需要的内容是总是需要不同的rules来筛选。
random.seed(datetime.datetime.now()) 表示选择随机生成数的seed也来一下随机,表示随机即可。
作者给了一个初始页面 "/wiki/Kevin_Bacon" 再加上函数里面的"http://en.wikipedia.org" 就是一个wiki的页面了。
这个函数是用来获取一个页面内的某种链接,得到了一系列的链接,然后从中任意选取一个。links是数组,索引从0开始,所以后面要减一。选择了links中的某一个link,然后打印出来,最后以这个开始新的循环。
二,爬wiki站点
上一个是在wiki内随机游走,初始页面(一个链接),然后在此页面内随机选取一个链接,重复过程。这个是在wiki homepage 开始,找出所有链接,打开所有链接,然后在打开的链接内再找出所有链接,以此爬取整个site。
定义一个函数来爬取所有的页面,以此重复。pages刚开始设置为一个空的列表,然后加入新的链接,以此来避免重复爬取一个页面。这里的href在findAll里面应该是一个关键字,后面加了一个if验证,我也不太清楚。可能是有的href可能不是attrs?也有可能是link的有效性之类的吧。
两个小函数:replace(old,new,max)用法:String.replace(old,new,max)
split(string,count) string 默认包括空格 /n /t
这里有一个global 的用法,意思就是函数里外都是这个的意思。
这一章的内容难了!越来越难了,加油!
P.S.:没能上车的小伙伴欢迎留言,如果我会我直接回答你!如果不会,我谷歌后回答你!如果要加我微信,不行。