xx百科词条点评爬虫项目介绍
【摘要】 该爬虫项目实现对xx百科网站中任意文本数据进行爬取后保存到本地,并存储在数据库中便于查看。
1·项目简介:
1.该爬虫项目实现对xx百科网站中任意文本数据进行爬取后保存到本地,并存储在数据库中便于查看。
2.该程序能将网站中的文字,评论数与点赞数量爬取下来并保存到mysql中的pachong数据库中的qiushibaike的表中。
2·程序步骤:
首先先进入网站的第一页,然后将网站中各个词条的标签头爬取下来,然后按照标签头进入不同的网页再将网页中的词条内容,点赞数,评论数保存下来并存去到数据库中,然后在切换网页爬取各个词条的标签头,重复操作。
3·操作注意事项:
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)