xx百科词条点评爬虫项目介绍

举报
Famine_wang 发表于 2018/12/31 15:09:39 2018/12/31
【摘要】 该爬虫项目实现对xx百科网站中任意文本数据进行爬取后保存到本地,并存储在数据库中便于查看。

1·项目简介:

1.该爬虫项目实现对xx百科网站中任意文本数据进行爬取后保存到本地,并存储在数据库中便于查看。

2.该程序能将网站中的文字,评论数与点赞数量爬取下来并保存到mysql中的pachong数据库中的qiushibaike的表中。

 

2·程序步骤:

首先先进入网站的第一页,然后将网站中各个词条的标签头爬取下来,然后按照标签头进入不同的网页再将网页中的词条内容,点赞数,评论数保存下来并存去到数据库中,然后在切换网页爬取各个词条的标签头,重复操作。

 

操作注意事项:

1.由于程序数据保存需要连接到数据库,所以程序中数据库连接信息需要与mysql中的数据库属性一致(连接名,用户密码,数据库名称)

2.本地创建数据库时各个变量类型设置:num(int),citiao(varchar),dianzanshu(int),pinglunshu

int)

3.数据库varchai类型的数据的字符集设置:utf8,排序规则:utf8_general_ci

代码如下:


# -*- coding: utf-8 -*-
"""
Created on Mon Sep 18 22:57:19 2017
@author: 失序
"""
import re
import urllib.request
from bs4 import  BeautifulSoup
import urllib.parse
import pymysql
class Spider(object):
    def __init__(self):
        self.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36r)'
        self.headers = {'User-Agent': self.user_agent}    
    def start1(self,url):
            request=urllib.request.Request(url,headers=self.headers)
            data1=urllib.request.urlopen(request)
            datab = []
            soup = BeautifulSoup(data1, 'html.parser', from_encoding='utf-8')
            link3 = soup.findAll('a',attrs={'href':True})
            for a in link3:
                ob = (re.match('/article/\d\d\d\d\d\d\d\d\d',a.attrs['href']))
                #正则表达式的应用
                if(ob):
                    datab.append(ob.group())
            for x in datab:
                if not x in dataname:
                    dataname.append(x)
                        #print(link3)
    def start(self,url):
        try:
            request=urllib.request.Request(url,headers=self.headers)
            data=urllib.request.urlopen(request)
            datas=[]
            dataa=[]
            soup = BeautifulSoup(data, 'html.parser', from_encoding='utf-8')
            link1 = soup.find_all('div',class_='content')
            #找div标签中带content的标签
            link2 = soup.find_all('i',class_='number')
            #找i标签中带number的标签
            #print(link1,link2)
            for link in link1:
                datas.append(link.get_text())
                #提取标签正文
            for link in link2:
                dataa.append(link.get_text())
            #for link in link3:
             #   datab.append(link["id"])
            return datas,dataa
        except Exception as e:
            print(e)
    def save(self,i,ff,dd):
            # 打开数据库连接
            db = pymysql.connect("localhost","root","123","pachong",charset="utf8")
            # 使用 cursor() 方法创建一个游标对象 cursor
            cursor = db.cursor()
            insert_color = ("INSERT INTO qiushibaike(num,citiao,dianzanshu,pinglunshu)" "VALUES(%s,%s,%s,%s)")
            data_color = (i,ff[0].replace("\n",""),dd[0],dd[1])
            try:
                cursor.execute(insert_color,data_color)
                db.commit()
            except:
                print('该数据已插入数据库')
            # print '******完成此条插入!' 
            db.close()
            print (str(i)+'爬取数据并插入mysql数据库完成...\n')
url='https://www.qiushibaike.com'
url1=url + '/text'
dataname=[]
spider=Spider()
spider.start1(url1) 
#将网页中段子的标签头爬取下来
i=0
cc=1
while True:
    try:
        url2 = 'https://www.qiushibaike.com' + dataname[i]
        ff,dd = spider.start(url2)
        i += 1
        if(len(ff[0].replace("\n",""))>=20):
            spider.save(i,ff,dd)
        #每次爬取一条记录
    except Exception as e:
        try:
            cc += 1
            url1=url + '/text/page/' + str(cc)
            spider=Spider()
            spider.start1(url1)    
        except Exception as e:
            break;


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。