mongodb搭建校内搜索引擎——爬取网页文本

目标:
读取excle文档中存储的url列表,爬取列表中网页的文本内容

概要:
在已经在获得爬虫获取的url列表的工作基础上,进行网页内容的获取。编程用到request(获取网页源码),BeautifulSoup(解析html,并且获取网页纯文本),lxml(解析html,在使用BeautifulSoup要预先安装),Xlrd(读取excle中内容)

我的思考:
一开始想用正则表达式来判断并且获的网页源码中的内容,但是发现自己的需求是获取所有纯文本的内容,刚开始接触爬虫时尝试过用,当你的需求是提取标题,或者特定单一的内容时,使用正则表示式还是可行的。考虑到我的要求是提取所有的文本内容,正则表达式就是比较局限,要考虑的情况较多,难免会有遗漏,所有去google有没有现有的python模块能干这种事。
果然,找到如下内容:

BeautifulSoup简介

在这里附上BeautifulSoup的中文文档使用链接:
BeautifulSoup4.2.0中文文档
在这里我只是使用了最为简单的方法实现,BeautifulSoup不仅实现了我的需求,而且远比我想象的还要强大。

代码:

#-*-coding:utf8-*-
from bs4 import BeautifulSoup
import requests
import re
import xlrd
import time

def get_text(url):
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"}
    html=requests.get(url,headers = headers)#获取网页源码
    html_text=html.text

    soup=BeautifulSoup(html_text,"lxml")#用BeautifulSoup获取网页内的纯文本
    fp_result=open("result.txt","a")
    result=soup.get_text
    # print (type(result))
    row_number=0
    fp_result.write(url)#打开文件结果以txt文件输出
    fp_result.write("\n------------------------------------------\n")

    for text in soup.stripped_strings:#soup.stripped_strings列表逐个输出
        fp_result.write(str(row_number)+":")
        fp_result.write(text.encode("utf-8"))#以utf-8编码输出
        fp_result.write("\n")
        row_number+=1

    fp_result.close()#关闭文件


def get_xls(path):#打开已经通过爬虫获取的url列表,并且逐个读取url
    data=xlrd.open_workbook(path)#打开excle文件
    table=data.sheets()[0]#打开工作表0
    nrows=table.nrows#获取行数
    finished_line=0

    for i in range(nrows):#逐个输出每行的内容
        ss=table.row_values(i)#获取列数
        for j in range(len(ss)):#逐个输出每列的内容
            finished_line+=1#记录完成进度
            try:
                get_text(ss[j])
                process=1.0*finished_line/nrows
                print "have finished %.3f" %process#记录完成进度
                print str(finished_line)
            except requests.exceptions.ConnectionError:#当出现requests.exceptions.ConnectionError时,将错误的链接记录到error.txt文件,错误原因有待进一步研究解决
                fp_error.write(ss[j]+"\n")

    print "target finished "+str(nrows)#记录总共的行数


fp_error=open("error.txt","a")#打开记录错误的文件
fp_error.write(time.strftime('%Y-%m-%d',time.localtime(time.time())))#记录此次运行时间
fp_error.write("\n------------------------------------------\n")
get_xls("cs.xlsx")#调用函数,获取内容
fp_error.close()#关闭错误文件
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值