1 #coding:utf-8 2 import urllib 3 ###### 4 #爬虫v0.1 利用urlib 和 字符串内建函数 5 ###### 6 '''目标网站: 7 ''' 9 def getHtml(url): 10 # 获取网页内容 11 page = urllib.urlopen(url) 12 html = page.read() 13 return html 14 15 def content(html): 16 # 内容分割的标签 17 str = '<article class="article-content">' 18 content = html.partition(str)[2] 19 str1 = '<div class="article-social">' 20 content = content.partition(str1)[0] 21 return content # 得到网页的内容 22 23 def title(content,beg = 0): 24 # 匹配title 25 # 思路是利用str.index()和序列的切片 26 try: 27 title_list = [] 28 while True: 29 num1 = content.index('】',beg)+3 30 num2 = content.index('</p>',num1) 31 title_list.append(content[num1:num2]) 32 beg = num2 33 34 except ValueError: 35 return title_list 36 37 def get_img(content,beg = 0): 38 # 匹配图片的url 39 # 思路是利用str.index()和序列的切片 40 try: 41 img_list = [] 42 while True: 43 src1 = content.index('src=',beg)+4 44 src2 = content.index('/></p>',src1) 45 img_list.append(content[src1:src2]) 46 beg = src2 47 48 except ValueError: 49 return img_list 50 51 def many_img(data,beg = 0): 52 #用于匹配多图中的url 53 try: 54 many_img_str = '' 55 while True: 56 src1 = data.index('http',beg) 57 src2 = data.index(' /><br /> <img src=',src1) 58 many_img_str += data[src1:src2]+'|' # 多个图片的url用"|"隔开 59 beg = src2 60 except ValueError: 61 return many_img_str 62 63 def data_out(title, img): 64 #写入文本 65 with open("/home/qq/data.txt", "a+") as fo: # 在你电脑运行的时候这里的地址改一下 66 fo.write('\n') 67 for size in range(0, len(title)): 68 # 判断img[size]中存在的是不是一个url 69 if len(img[size]) > 70: 70 img[size] = many_img(img[size])# 调用many_img()方法 71 fo.write(title[size]+'$'+img[size]+'\n') 72 73 74 #html = getHtml(" /") 75 #content = content(html) 76 #title = title(content) 77 #img = get_img(content) 78 #data_out(title, img) 79 # 实现了爬的单个页面的title和img的url并存入文本 80 81 def main_content(html): 82 # 首页内容分割的标签 83 str = '<div class="content">' 84 content = html.partition(str)[2] 85 str1 = '</div>' 86 content = content.partition(str1)[0] 87 return content # 得到网页的内容 88 89 # 90 91 #进page_url: /" title="[博海拾贝0620期]今天没吃粽子的不止我一个人吧 | 92 93 # 新增一个参数order,默认为20 94 def page_url(content, order = 20, beg = 0): 95 try: 96 url = [] 97 i = 0 98 while i < order: 99 url1 = content.index('<h2><a href="',beg)+13 100 url2 = content.index('" ',url1) 101 url.append(content[url1:url2]) 102 beg = url2 103 i = i + 1 104 return url 105 except ValueError: 106 return url 107 108 def get_order(num): 109 # num代表获取的条目数量 110 url_list = [] 111 page = num / 20 112 order = num % 20 # 超出一整页的条目 113 if num < 20: # 如果获取的条目数量少于20(一页20个),直接爬取第一页的num条 114 url = ' http://bohaishibei.com/post/category/main' 115 main_html = getHtml(url) 116 clean_content = main_content(main_html) 117 url_list = url_list + page_url(clean_content, num) 118 for i in range(1, page+1): # 需这里需要尾巴 119 url = ' http://bohaishibei.com/post/category/main/page/%d' % i # 爬取整页的条目 120 main_html = getHtml(url) 121 clean_content = main_content(main_html) 122 url_list = url_list + page_url(clean_content) #获取整夜 123 124 if (i == page)&(order > 0): # 爬到最后一页,如果有超出一页的条目则继续怕order条 125 url = ' http://bohaishibei.com/post/category/main/page/%d' % (i+1) 126 main_html = getHtml(url) 127 clean_content = main_content(main_html) 128 url_list = url_list + page_url(clean_content, order) 129 #print len(page_url(clean_content, order)) 130 return url_list 131 132 #html = getHtml(" http://bohaishibei.com/post/10475/") 133 #content = content(html) 134 #title = title(content) 135 #img = get_img(content) 136 #data_out(title, img) 137 # 实现了爬的单个页面的title和img的url并存入文本 138 139 order = get_order(30) # get_order方法接受参数,抓取多少期的数据 140 for i in order: # 遍历列表的方法 141 html = getHtml(i) 142 content_data = content(html) 143 title_data = title(content_data) 144 img_data = get_img(content_data) 145 data_out(title_data, img_data) 146 147 #print len(get_order(21)) 148 #main_html = getHtml(" http://bohaishibei.com/post/category/main/page/6/") 149 #clean_content = main_content(main_html) 150 #str = page_url(clean_content) 151 #print str 152 #print "---------" 153 #print len(str) |
万奢网手机版
官网微博:万奢网服务平台