python爬虫小案例(逻辑规范的第一步)---糗事百科

非常简单的爬虫小案例,规范代码从此开始。

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()

总结:

  1. 将一个爬虫封装成一个类,类中包含多个方法,逻辑清晰,便于维护。
  2. 将初始化参数在init() 设置,比如session、conn、cursor
  3. 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

此爬虫小案例十分的粗糙,然而这却是未来壮大的根基。

有任何问题请留言评论。

猜你喜欢

转载自blog.csdn.net/weixin_36586120/article/details/79495840