爬虫一:爬取信息

-------------------------------------------
--------------爬虫的思路-------------------
-------------------------------------------
先判断网页是否允许爬虫
(1)get_html()获取源码
  1、不允许就加上headers头部信息,模拟用户访问
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}
  2、请求进入网页
    request = urllib2.Rwquest(url,headers = headers)
  3、打开网页
    response = urllib2.urlopen(request)
  4、获取源码
    text = response.read()

(2)get_Url()获取标题或者内容
  1、进入网页寻找网页中我们寻找的内容部分
  2、找到标题或者内容那一部分,通过正则表达式匹配该部分
    pattern = re.compile('<a href="/story/(.*?)"',re.S)# re.S匹配换行符
  3、在整个网页中匹配这个内容
    items = re.findall(pattern,html)
  4、打印出来
    urls = []#多个页面,把每个页面的编码放到list中
    for item in items:
    urls.append('http://daily.zhihu.com/story/'+item)
    #print urls[-1] #切片
    return urls
  5、调用显示

(3)多页的显示
  1、看每页的网址的区别,一般是在后面加上+str(page)
  2、然后分别调用每页的内容

(4)把获取的内容写到文件中保存
  items = pattern.compile(patten,html)
  with open('test.txt','w') as test:
  for item in items:
  test.write(item)#往文件中写内容
  test.write(" ")#换行

我们如果想爬取一个网页,那么就需要打开网页获取网页的源码,一般使用谷歌和火狐稍微好点,现在教你们怎样获取网页源码:

1、打开网页,在网页空白处右击选择查看网页源代码;

2、进入源代码查找你需要用到的信息,复制下来,然后用正则匹配下来,我们有个懒惰匹配(.*?)就是代表你要获取的内容,不需要可以用.*?代替,很长的数字可以用d+代替等等,具体的正则表达式看我之前的帖子http://www.cnblogs.com/zhangjiansheng/p/6853729.html,里面有详细描述。

比如下面这个例子:

    <tr><td>1</td><td>989584027708</td><td>(香港地区)National_Bank_Abu_Dhabi</td><td>00852-341343660</td><td>18/F_Nine_Queens_Road_Central</td></tr>

 <tr><td>d+</td><td>d+</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>

以上只是爬取没有反爬机制的网页。

下面是用正则与urllib编写的一个爬虫,用来爬取http://furhr.com/,把所有的银行名称,联系电话,银行地址爬取下来,并把爬取到的内容放到Excel表格内,具体程序如下所示:

# -*- coding:utf-8 -*-
__author__ = 'Demon'

import xlwt#excel表格函数
import urllib,re

def getdata():
    url_list = []
    for i in range(1,100):
        url = 'http://furhr.com/?page={}'.format(i)#多页调用
        #print url
        try:#错误处理
            html = urllib.urlopen(url).read()#打开网页获取源码
            #print html
        except Exception as e:
            print e
            continue
        #正则表达式 获取想要获取的内容
        page_list = re.findall(r"<tr><td>d+</td><td>d+</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>",html)
        #print page_list
        url_list.append(page_list)#把匹配到的内容放到list里面
    return url_list

def excel_write():
    newTable = 'test.xls'#新建一个excel表格并命名
    wb = xlwt.Workbook(encoding='utf-8')#申明表格编码格式
    ws = wb.add_sheet('test1')#增加表格单元
    headData = ['公司名称','电话','地址']#写表头
    for colnum in range(0,3):
        ws.write(0,colnum,headData[colnum],xlwt.easyxf('font: bold on'))
        #把表头写在第0行,0,1,2这三列,并把字体设置为加粗
    index = 1
    for item in items:#把数据写到表格里面
        for j in range(0,len(item)):
           for i in range(0,3):
#               print item[j]
               print item[j][i]
               ws.write(index,i,item[j][i])
           index +=1
    wb.save(newTable)

if __name__ == "__main__":#判断函数入口
    items = getdata()#调用网页源码获取函数
    excel_write()#调取Excel函数,把数据放在Excel中

爬取的结果如下图所示:

原文地址:https://www.cnblogs.com/zhangjiansheng/p/6853775.html