非常简单的爬虫小案例,规范代码从此开始。
import requests
from bs4 import BeautifulSoup
import pymysql
import time
class QSBK():
'''
初始化参数
session保持连接状态
headers 请求头 模拟浏览器
conn 建立数据库连接
cursor 建立游标
'''
def __init__(self):
self.session = requests.session()
self.headers = {'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Mobile Safari/537.36'}
self.conn=pymysql.connect(host='127.0.0.1',user='root',passwd='123',db='pydb',charset='utf8')
self.cursor=self.conn.cursor()
'''
url请求
response.text 获得请求源码 为下一步数据处理做准备
'''
def get_response(self,url):
try:
response=self.session.get(url)
print('请求状态码%d'%response.status_code)
if response.status_code==200:
print("请求成功")
return response.text
except Exception as e:
print('请求失败,请求状态码:%d'%response.status_code)
print(e)
print('3秒后请求重试')
time.sleep(3)
self.get_response(url)
'''
数据处理
data_list 将数据存入列表,为下一步存入数据库做准备
'''
def parse_data(self,response):
data_list=[]
soup=BeautifulSoup(response,'lxml')
#data=soup.find('div',class_="user-header-cover").find('h2').text
#print(data)
name=soup.select("div[class='user-header-cover'] h2")[0].text
userul=soup.select("div[class='user-statis user-block'] ul")[1]
print(userul)
userli=userul.select('li')
print(userli)
wedding = userli[0].text.split(':')[-1]
xingzuo = userli[1].text.split(':')[-1]
job = userli[2].text.split(':')[-1]
home = userli[3].text.split(':')[-1]
data_list.append(name)
data_list.append(wedding)
data_list.append(xingzuo)
data_list.append(job)
data_list.append(home)
return data_list
'''
存入数据库
'''
def save_mysql(self,data):
try:
row=self.cursor.execute("insert into `user`(`name`,wedding,xingzuo,job,home) VALUES (%s,%s,%s,%s,%s)",data)
self.conn.commit()
print("成功保存%d条数据"%row)
except:
self.conn.rollback()
finally:
self.cursor.close()
self.conn.close()
def main(self):
try:
url = 'https://www.qiushibaike.com/users/36919819/'
response=self.get_response(url)
data=self.parse_data(response)
self.save_mysql(data)
print('爬取成功,项目终止!')
except Exception as e:
print(e)
print('爬取失败,程序终止!')
if __name__=='__main__':
qsbk=QSBK()
qsbk.main()
总结:
- 将一个爬虫封装成一个类,类中包含多个方法,逻辑清晰,便于维护。
- 将初始化参数在init() 设置,比如session、conn、cursor
- BeautifulSoup 的应用很简单,select()和findall()/find()的区别。
如select 多节点搜索
userul=soup.select("div[class='user-statis user-block'] ul")[1]
find/findall 多节点搜索
data=soup.find('div',class_="user-header-cover").find('h2').text
此爬虫小案例十分的粗糙,然而这却是未来壮大的根基。
有任何问题请留言评论。