python 简单爬虫源码

Posted on Posted in python
Tips: 本文创建于2016年6月2日,已超过 2 年,内容或图片可能已经失效!

> code 01

  1. #-*—coding:utf8-*-  
  2. import requests  
  3. import re  
  4. #下面三行是编码转换的功能  
  5. import sys  
  6. reload(sys)  
  7. sys.setdefaultencoding("utf-8")  
  8.   
  9. #hea是我们自己构造的一个字典,里面保存了user-agent  
  10. hea = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}  
  11. # html = requests.get('http://jp.tingroom.com/yuedu/yd300p/')  
  12. html = requests.get('http://jp.tingroom.com/yuedu/yd300p/',headers = hea)  
  13.   
  14. html.encoding = 'utf-8' #这一行是将编码转为utf-8否则中文会显示乱码。  
  15. # print html.text  
  16. # title = re.findall('color:#666666;">(.*?)</span>',html.text,re.S)  
  17. # for each in title:  
  18. #     print each  
  19. #  
  20. chinese = re.findall('color: #039;">(.*?)</a>',html.text,re.S)  
  21. for each in chinese:  
  22.     print each  

> code 02

  1. #-*-coding:utf8-*-  
  2. import requests  
  3. import re  
  4. # url = 'https://www.crowdfunder.com/browse/deals'  
  5. url = 'https://www.crowdfunder.com/browse/deals&template=false'  
  6.   
  7.   
  8. # html = requests.get(url).text  
  9. # print html  
  10.   
  11.   
  12. #注意这里的page后面跟的数字需要放到引号里面。  
  13. data = {  
  14.     'entities_only':'true',  
  15.     'page':'2'  
  16. }  
  17. html_post = requests.post(url,data=data)  
  18. title = re.findall('"card-title">(.*?)</div>',html_post.text,re.S)  
  19. for each in title:  
  20.     print each  

> code 03

  1. #-*_coding:utf8-*-  
  2. import requests  
  3. import re  
  4. import sys  
  5. reload(sys)  
  6. sys.setdefaultencoding("utf-8")  
  7.   
  8. class spider(object):  
  9.     def __init__(self):  
  10.         print u'开始爬取内容。。。'  
  11.   
  12. #getsource用来获取网页源代码  
  13.     def getsource(self,url):  
  14.         html = requests.get(url)  
  15.         html.encoding = 'utf-8' #这一行是将编码转为utf-8否则中文会显示乱码。  
  16.         return html.text  
  17.   
  18. #changepage用来生产不同页数的链接  
  19.     def changepage(self,url,total_page):  
  20.         now_page = int(re.search('pageNum=(\d+)',url,re.S).group(1))  
  21.         page_group = []  
  22.         for i in range(now_page,total_page+1):  
  23.             link = re.sub('pageNum=\d+','pageNum=%s'%i,url,re.S)  
  24.             page_group.append(link)  
  25.         return page_group  
  26. #geteveryclass用来抓取每个课程块的信息  
  27.     def geteveryclass(self,source):  
  28.         everyclass = re.findall('(<li deg="".*?</li>)',source,re.S)  
  29.         return everyclass  
  30. #getinfo用来从每个课程块中提取出我们需要的信息  
  31.     def getinfo(self,eachclass):  
  32.         info = {}  
  33.         info['title'] = re.search('target="_blank">(.*?)</a>',eachclass,re.S).group(1)  
  34.         info['content'] = re.search('</h2><p>(.*?)</p>',eachclass,re.S).group(1)  
  35.         timeandlevel = re.findall('<em>(.*?)</em>',eachclass,re.S)  
  36.         info['classtime'] = timeandlevel[0]  
  37.         info['classlevel'] = timeandlevel[1]  
  38.         info['learnnum'] = re.search('"learn-number">(.*?)</em>',eachclass,re.S).group(1)  
  39.         return info  
  40. #saveinfo用来保存结果到info.txt文件中  
  41.     def saveinfo(self,classinfo):  
  42.         f = open('info.txt','a')  
  43.         for each in classinfo:  
  44.             f.writelines('title:' + each['title'] + '\n')  
  45.             f.writelines('content:' + each['content'] + '\n')  
  46.             f.writelines('classtime:' + each['classtime'] + '\n')  
  47.      
    ;       f.writelines('classlevel:' + each['classlevel'] + '\n')  
  48.             f.writelines('learnnum:' + each['learnnum'] +'\n\n')  
  49.         f.close()  
  50.   
  51. if __name__ == '__main__':  
  52.   
  53.     classinfo = []  
  54.     url = 'http://www.jikexueyuan.com/course/?pageNum=1'  
  55.     jikespider = spider()  
  56.     all_links = jikespider.changepage(url,20)  
  57.     for link in all_links:  
  58.         print u'正在处理页面:' + link  
  59.         html = jikespider.getsource(link)  
  60.         everyclass = jikespider.geteveryclass(html)  
  61.         for each in everyclass:  
  62.             info = jikespider.getinfo(each)  
  63.             classinfo.append(info)  
  64.     jikespider.saveinfo(classinfo)  
» 转载请注明来源:若我若鱼 » python 简单爬虫源码

Leave a Reply

Your email address will not be published. Required fields are marked *

8 − 1 =