首先要解决的就是不同的题目在不同的页上,也就是要实现翻页功能,自动获取所要爬取的地址,通过分析可以得出不同的页面也就是volume=后面的数字不同
所以我们可以用re模块来替换即可:
new_url = re.sub('(d+)', '%s' %i, url)
得到所有URL后就很简单了,写个正则表达式来匹配即可。
1 from urllib import request 2 import re 3 4 def get_page_list(url, total_page): 5 page_list = [] 6 for i in range(1, total_page): 7 new_url = re.sub('(d+)', '%s' %i, url) 8 page_list.append(new_url) 9 return page_list 10 11 if __name__ == '__main__': 12 f = open('in.txt','a') 13 url = 'http://poj.org/problemlist?volume=1' 14 15 page_list = get_page_list(url, 3) 16 for page in page_list: 17 text = request.urlopen(page).read().decode() 18 s = re.compile(r'href=problem?(.*?)</a>') 19 problem_list = re.findall(s, text) 20 for problem in problem_list: 21 f.writelines(problem+' ') 22 f.close()